Kei*_*eno 4 reactjs mobx mobx-react
我目前正在编写一个 React 应用程序,当任何可观察的值发生变化时,它应该能够重新渲染组件。问题是,email如果它发生变化,我将无法重新渲染。
store.ts
export class ExampleStore {
@observable email = 'hello';
@action setEmail(email: string) {
this.email = email;
}
}
Run Code Online (Sandbox Code Playgroud)
索引.tsx
const stores = {
exampleStore
};
ReactDOM.render(
<Provider {...stores}>
<App />
</Provider>,
document.querySelector('#root')
);
Run Code Online (Sandbox Code Playgroud)
应用程序.tsx
interface Props {
exampleStore?: ExampleStore;
}
@inject('exampleStore')
@observer
export class App extends React.Component<Props, {}> {
componentDidMount() {
setInterval(() => {
this.props.exampleStore!.setEmail(Math.random() * 10 + '');
}, 2500);
}
render() {
const { email } = this.props.exampleStore!;
return <div>{email}</div>;
}
}
Run Code Online (Sandbox Code Playgroud)
我见过很多使用useContext钩子的例子,但我必须使用类组件。我不确定为什么这不会再次调用渲染函数。我有mobx并mobx-react安装。
你在使用 MobX 6 吗?
装饰器 API 稍有变化,现在您需要makeObservable在构造函数中使用方法来实现与以前相同的功能:
class ExampleStore {
@observable email = "hello";
constructor() {
makeObservable(this);
}
@action setEmail(email) {
this.email = email;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然有新的东西可能会让你完全放弃装饰器,makeAutoObservable:
class ExampleStore {
email = "hello2";
constructor() {
// Don't need decorators now, just this call
makeAutoObservable(this);
}
setEmail(email) {
this.email = email;
}
}
Run Code Online (Sandbox Code Playgroud)
更多信息在这里:https : //mobx.js.org/react-integration.html
Codesandbox:https ://codesandbox.io/s/httpsstackoverflowcomquestions64268663-9fz6b ? file =/ src/App.js
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |