我对React钩子很陌生。我以前在react中使用过基于类的组件,并使用了像setState
这样的方法。然而,这是我第一次将React钩子与基于函数的组件一起使用。所以可能标题也不正确。下面是我尝试做的解释。我尝试创建一个dataModel
,它将包含使用不同API获取的所有数据。然后这个模型将被传递给不同的组件。这个dataModel
将在页面初始加载时创建。在下面的代码中,我声明了一个变量dataModel
,它将包含keys
,每个key
将有一个数组或字典。我尝试了一些选项,但它不起作用。我已经把我尝试的代码。我很感激你能帮我修好它。
import './App.css';
import Query from './components/landing/query';
import React, {useState,useEffect} from 'react';
function App() {
const [dataModel,setDataModel] = useState({
yearOptions: [],
locOptions: []
})
const fetchYear = async()=>{
await fetch(
"http://localhost:3002/getYear"
).then((response)=>response.json())
.then((data)=>{
setDataModel(
data.map((x)=>{
let eachx = {key:x.key, text:x.value,value:x.value}
dataModel.yearOptions.concat(eachx)
})
)
})
}
const fetchLoc = async()=>{
await fetch(
"http://localhost:3002/getYear"
).then((response)=>response.json())
.then((data)=>{
setDataModel(
data.map((x)=>{
let eachx = {key:x.key, text:x.value,value:x.value}
dataModel.locOptions.concat(eachx)
})
)
})
}
useEffect(() => {
fetchYear();
fetchLoc();
}, []);
return (
<div className="App">
<header className="App-header">
React Based FrontEnd and Nodejs Based Rest API Demo Project
</header>
<Query props={{model:dataModel}}/>
</div>
);
}
export default App;
2条答案
按热度按时间hlswsv351#
你违反了
useState
的使用方式。这不像在类组件中,要么你应该使用两个状态变量来存储状态,要么你应该单独更新状态,正如你可能知道的,如果状态没有改变,react将不会重新呈现。和对象文本不显示状态的任何更改,因为它是通过JS中的引用访问的。您可以使用ES6扩展运算符来实现这一点。这是两个例子这是第二种方法
在我看来,第一种选择是最好的,我想大多数开发人员都会同意我的观点
dy1byipe2#
正如第一个答案中提到的,第一个选项是有效的。然而,对于第二个选项,代码有一小部分变化。下面是如何设置数据模型的第二个选项的代码。