IAs*_*dOS 4 javascript jsx reactjs react-router mobx
SidenavStore.js - 定义 Sidenav 是否可见,默认为 true:
const SidenavStore = types
.model('SidenavStore', {
isSidenavVisible: types.optional(types.boolean, true),
})
.actions(self => ({
hideSidenav: () => { self.isSidenavVisible = false; },
showSidenav: () => { self.isSidenavVisible = true; },
}));
export default SidenavStore;
Run Code Online (Sandbox Code Playgroud)
ErrorPage 使用 SidenavStore 来确定是否显示 Sidenav。
import sidenavStore from '../../../stores/SidenavStore';
class ErrorPage extends React.Component {
componentDidMount() {
sidenavStore.hideSidenav();
}
componentWillUnmount() {
sidenavStore.showSidenav();
}
render() {
return (
<div>
<h1>My Content Here</h1>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
在 中App.jsx,适用的代码:
const sidebarStore = SidebarStore.create();
const App = () => (
<BrowserRouter>
<Provider sidebarStore={SidebarStore}>
<Main>
{code here}
</Main>
</Provider>
</BrowserRouter>
);
export default App;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
在浏览器中,我收到错误TypeError: _stores_SidenavStore__WEBPACK_IMPORTED_MODULE_8__.default.hideSidenav is not a function。然而,您可以看到,在 SidenavStore.js 中同时存在 hideSidenav 和 showSidenav。
我在引用什么或做错了什么?任何指导将不胜感激。
您当前正在导入模型并尝试使用它。相反,您希望从Providerwith获取实例inject并从 props 使用它。
import { observer, inject } from "mobx-react";
class ErrorPage extends React.Component {
componentDidMount() {
this.props.sidenavStore.hideSidenav();
}
componentWillUnmount() {
this.props.sidenavStore.showSidenav();
}
render() {
return (
<div>
<h1>My Content Here</h1>
</div>
);
}
}
export default inject("sidebarStore")(observer(ErrorPage));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |