【发布时间】:2019-08-15 06:35:27
【问题描述】:
在我的 react 应用程序(使用 typescript)中,我想使用 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 的例子
【问题讨论】:
-
mobx-react@5不支持钩子,但version 6 will support it, which is inrc.4right now。 -
@Tholle,谢谢。顺便说一句,我看到您在这里非常活跃,尤其是对于 react 标签,您是否认为自 16.8 以来使用上下文变得更加容易,为中小型应用程序构建自定义状态管理器是否更方便,而不是导入一些 MB 的库?
-
你绝对可以使用例如
useReducer钩子并通过上下文共享状态对象和调度函数,这将适用于很多用例,但我认为它不会取代 MobX 用于中型应用程序。这在很大程度上取决于您的特定项目。
标签: reactjs mobx mobx-react react-hooks react-tsx