[英]React Hooks Mobx: invalid hook call. Hooks can only be called inside of the body of a function component
I am using React Hooks and when I wrap my component with observer from mobx, I am getting this error. 我正在使用React Hooks,当我用mobx的观察者包装我的组件时,我收到了这个错误。 What can be the problem?
可能是什么问题? Is it possible to use mobx with React Hooks?
是否有可能将反复钩子与mobx一起使用?
import classnames from 'classnames';
import { observer } from 'mobx-react';
import React, { useState } from 'react';
import { Link } from 'react-router-dom';
import ViewStore from '../../../store/ViewStore';
interface INavbarProps {
viewStore: ViewStore;
}
const Navbar = observer((props: INavbarProps) => {
const { authed } = props.viewStore;
const [drawerIsOpen, setState] = useState(false);
function toggleMenu() {
drawerIsOpen ? setState(false) : setState(true);
}
return (
<div>
<Link to="/">Home</Link>
<Link to="/admin">Admin</Link>
<Link to="/all">All</Link>
{authed ? <Link to="/">Logout</Link> : <Link to="/login">Login</Link>}
<div onClick={toggleMenu}>
Open Menu
</div>
<div className={classnames('drawer', {
drawer_open: drawerIsOpen,
})} />
<div onClick={toggleMenu} className={drawerIsOpen ? 'backdrop' : ''}></div>
</div>
);
});
export default Navbar;
It's currently not supported to use hooks with the mobx-react
package since it creates a class component under the hood. 目前不支持在
mobx-react
包中使用钩子,因为它在引擎盖下创建了一个类组件。
You can use the 6.0.0
release candidate that will be released soon, which does support hooks. 您可以使用即将发布的
6.0.0
候选版本,它支持挂钩。
package.json 的package.json
{
"dependencies": {
"mobx-react": "6.0.0-rc.4"
}
}
The MobX observer will result in a class component under the hood. MobX观察者将导致一个类组件。
As per here , you can work around this by doing: 按照此处的说法 ,您可以通过以下方式解决此问题:
(props) => <Observer>{() => rendering}</Observer>
instead of: 代替:
observer((props) => rendering)
import React from "react";
import { Observer } from "mobx-react";
const MobxFunctionalComponentObserver = props => (
<Observer
inject={stores => ({ ... })}
render={props => (
...
)}
/>
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.