【发布时间】:2021-09-24 14:43:52
【问题描述】:
我正在使用 React 进行一个项目,当新数据插入我的数据库时,我需要使用 react 钩子更新反应状态。我正在使用 contextAPI,但就我而言,我的组件的结构方式无法使用从数据库返回的数据更新该状态。这是我的代码的更多细节:
我有一个组件,其中数据存在于 useState
const [questions, setQuestions] = useState([]);
useEffect(() => {
(async () => {
const resp = await axios.get(
`${process.env.REACT_APP_BACKEND_URL}/product/${productId}/question`
);
setQuestions(resp.data);
})();
}, []);
我还有另一个名为 PostQuestion 的组件,它将发布请求发送到我的后端并将新问题插入我的数据库。他们完全不知道彼此的存在。我们可以使用 contextAPI 将 props 传递给孩子和嵌套的孩子。但是 PostQuestion 组件不是所有问题数据都存在的那个组件的子组件。这就是我对 contextAPI 的理解。但他们都是另一个组件的孩子。但我不想放置我的
const [questions, setQuestions] = useState([]);
在这两个组件的父组件中。我可以做些什么来更新我的 PostQuestion 组件中的问题状态?
这是我的 PostQuestion 组件代码
const postQuestionHandler = async (e) => {
e.preventDefault();
try {
const resp = await axios({
url: `${process.env.REACT_APP_BACKEND_URL}/product/${productId}/question`,
method: "POST",
data: {
question: questionInput.question.value,
userId,
},
});
if (resp.status === 200) {
setShowForm(false);
}
} catch (err) {
alert(err);
}
};
return <SecondaryBtn disabled={questionInput.question.error}>
Submit Your Question
</SecondaryBtn>
总结
我有 2 个没有父子关系的组件。当我在组件 2 中取回新数据时,我想通过调用 setState 来更新组件 1 中的状态。我不想在这两个父组件中拥有状态,因为它已经足够混乱了。
如果我使用 Redux,就不会出现这样的问题。也许在 contextAPI 中也有办法做到这一点。
【问题讨论】:
标签: reactjs react-redux react-hooks state-management react-context