首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(useState)和Mobx [无mobx-]

(useState)和Mobx [无mobx-]
EN

Stack Overflow用户
提问于 2019-03-25 02:53:58
回答 2查看 16.4K关注 0票数 6

在我的get应用程序(带有类型记录)中,我希望使用react挂钩(特别是useState)来管理表单状态,同时使用它作为Mobx存储的一个可观察组件,但我得到了错误。

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

因此,例如在以下组件中

代码语言:javascript
复制
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的旧方法不是在哪里吗?

下面是示例的砂箱

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-27 08:40:38

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

票数 8
EN

Stack Overflow用户

发布于 2019-03-25 06:30:01

mobx-react不支持钩子,如果您希望在mobx中使用钩子,则需要使用mobx-react-lite,这也是github文件中提到的

要做到这一点,您可以使用React.createContext代替提供者,使用useContext代替inject

Index.tsx

代码语言:javascript
复制
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

代码语言:javascript
复制
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;

工作演示

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55330690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档