【发布时间】:2020-11-23 23:51:24
【问题描述】:
我有一个带有 Express 的 MongoDB,它在端点上提供数据,由 React 的 useEffect 访问:
function App() {
// const [responsive, setResponsive] = useState("vertical");
// const [tableBodyHeight, setTableBodyHeight] = useState("100%");
const [data, setData] = useState([]);
const [columns, setColumns] = useState([]);
// const options = {
// filter:true,
// filterType:'dropdown',
// responsive,
// }
// Fetch data / headers from express server
useEffect(() => {
const fetchData = async () => {
const resp = await fetch('http://localhost:4000/todos/');
const respData = await resp.json();
// Filter out irrelevant data
const keysToFilterOut = ['_id', '__v']
const firstDatum = respData[0];
const filteredDatum = _.omit(firstDatum, keysToFilterOut);
const filteredColumns = Object.keys(filteredDatum);
setData(respData);
setColumns(filteredColumns);
};
fetchData()
}, [data]);
useEffect 钩子一直被调用,这意味着data 总是在变化。确实,我通过在钩子中添加以下 3 行来验证它:
console.log(data === respData);
console.log(data);
console.log(respData);
第一个控制台日志确实是false。我不明白,因为服务器没有更改数据,而且,我查看了其他 2 个控制台日志 - 它们看起来相同。数据有何不同以及如何修复?
这是我的应用程序控制台日志中的一个示例:
【问题讨论】:
-
因为Js中对象的相等性不是检查容器值而是检查引用?
-
也许this 可以帮助您使用 useEffect 挂钩深入比较对象。
-
@himayan 迄今为止的最佳选择。想把它改成答案吗?
-
当然。请给我一分钟。
标签: javascript reactjs use-effect