React Hooks (useState) and Mobx [No mobx-react-lite]



在我的反应应用程序(使用打字稿(中,我想使用 React 钩子(特别是 useState(来管理表单状态,同时将其用作 Mobx 商店的可观察组件,但我收到错误

钩子只能在函数组件的主体内部调用。

例如在以下组件中

import * as React from "react";
import { inject, observer } from "mobx-react";
import { MyStore } from "./MyStore";
interface IProps {
  myStore?: MyStore;
  id: string;
}
const MyComponent: React.FC<IProps> = props => {
  const [state, setState] = React.useState("");
  return (
    <div>
      <h1>{props.id}</h1>
    </div>
  );
};
export default inject("myStore")(observer(MyComponent));

我看到了一个解决方案,但那是使用 React.createContext 导出商店类。 不是 Mobx 和 Hooks 的旧方法吗?

这是示例的Sanbox。

感谢@Tholle提到 Mobx 版本,现在 Mobx 6 发布了这个问题,这个问题已经解决了

mobx-react不支持

钩子,如果你想在 mobx 中使用钩子,你需要利用 github 文档中也提到的mobx-react-lite

为此,您可以使用React.createContext而不是提供程序,并使用useContext而不是inject

Index.tsx

import * as React from "react";
import { render } from "react-dom";
import MyComponent, { Store } from "./MyComponent";
import "./styles.css";
import MyStore from "./MyStore";
function App() {
  const [state, setState] = React.useState("");
  return (
    <Store.Provider value={MyStore}>
      <div className="App">
        <MyComponent id={"someID"} />
      </div>
    </Store.Provider>
  );
}
const rootElement = document.getElementById("root");
render(<App />, rootElement);

MyComponent.tsx

import * as React from "react";
import { Observer } from "mobx-react-lite";
import { MyStore } from "./MyStore";
interface IProps {
  myStore?: MyStore;
  id: string;
}
export const Store = React.createContext();
const MyComponent: React.FC<IProps> = props => {
  const [state, setState] = React.useState("");
  const store = React.useContext(Store);
  console.log(state, store);
  return (
    <div>
      <h1>{props.id}</h1>
    </div>
  );
};
export default MyComponent;

工作演示

相关内容

  • 没有找到相关文章

最新更新