Reactjs 不渲染观察者的自定义挂钩

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("

React发布了一个nice(
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)是什么意思?