反应useEffect无法识别对象更改(路由器历史记录)

时间:2019-05-06 09:24:11

标签: javascript reactjs

我正在根据用户使用的搜索过滤器来更改我的一条路线的网址。每次更改后,我的组件都会正确重新渲染,这样我就可以检查自己的网址

// works as expected (logs the history obj on every rerender)
useEffect(() => {
  console.log('rerender', history);
});

但是,当我尝试仅在历史记录更新时才让其运行

//doesnt run ever
useEffect(() => {
  console.log('rerender', history);
}, [history]);

历史记录由路由器作为道具传递,我可以确认它是否已更改。

1 个答案:

答案 0 :(得分:1)

历史记录对象的内容会更改,但是对象引用本身保持不变。这意味着反应不会将其视为更改。如果要专门检查URL的更改,则应像[ history.location ]那样将其放在依赖项数组中。