Reactjs 不渲染观察者的自定义挂钩
React发布了一个nice(Reactjs 不渲染观察者的自定义挂钩,reactjs,react-hooks,Reactjs,React Hooks,React发布了一个nice(useFriendStatus),其中钩子订阅API以更新联机状态。 我试着模拟这个例子。我的钩子如下所示: export default function useStore(id) { const [data, setStatus] = useState(DataLayer.getData()); useEffect(() => { function handleStatusChange() { console.log("
useFriendStatus
),其中钩子订阅API以更新联机状态。
我试着模拟这个例子。我的钩子如下所示:
export default function useStore(id) {
const [data, setStatus] = useState(DataLayer.getData());
useEffect(() => {
function handleStatusChange() {
console.log("udpate ...." + id);
console.log(DataLayer.getData());
setStatus(DataLayer.getData());
}
DataLayer.register({"id":id, "callback":handleStatusChange});
setStatus(DataLayer.getData());
return () => {
DataLayer.unregister(id, handleStatusChange);
};
});
return data;
}
数据层实现一个setInterval方法,该方法永久地通知钩子并更改数据以进行测试。因此,我总是在我的控制台上更新。。。。消息以及当前对象。这个很好用
我的组件如下所示,但它不会重新渲染:
function MyComponent (props) {
const config = useStore(Math.floor((Math.random() * 1000) + 1));
return (
<div >
<pre>
<code> {JSON.stringify(config, null, 3)} </code>
</pre>
</div>
);
}
);
}
为什么使用自定义钩子的组件没有更新 customHook工作正常!问题似乎是对象的
setState
。每次要更新状态时,都必须创建一个副本,例如使用JSON.parse(JSON.stringify(obejct))
仅将修改过的对象传递给
setState
是不够的。customHook工作正常!问题似乎是对象的setState
。每次要更新状态时,都必须创建一个副本,例如使用JSON.parse(JSON.stringify(obejct))
仅仅将修改过的对象传递给
setState
是不够的。你没有得到console.log(config)??你能给我一个更详细的反馈吗:console.log(config)是什么意思?你没有得到console.log(config)??你能给我一个更详细的反馈吗:你对console.log(config)是什么意思?