Nyi*_*ung 7 state-management reactjs react-redux react-context react-hooks
我正在使用 React 开发一个项目,当新数据插入我的数据库时,我需要使用 React hook 更新反应状态。我正在使用 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);
})();
}, []);
Run Code Online (Sandbox Code Playgroud)
我还有另一个名为 PostQuestion 的组件,它将发布请求发送到我的后端并将新问题插入到我的数据库中。他们完全不知道彼此的存在。我们可以使用 contextAPI 将 props 传递给子级和嵌套子级。但 PostQuestion 组件不是所有问题数据都存在的组件的子组件。这就是我对 contextAPI 的理解。但它们都是另一个组件的子代。但我不想把我的
const [questions, setQuestions] = useState([]);
Run Code Online (Sandbox Code Playgroud)
在该组件中,该组件是这两个组件的父组件。我可以做什么来更新 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>
Run Code Online (Sandbox Code Playgroud)
概括
我有两个没有父子关系的组件。当我在组件 2 中取回新数据时,我想通过调用 setState 来更新组件 1 中的状态。我不想在这两个组件父组件中拥有状态,因为它已经足够混乱了。
如果我用Redux就不会出现这样的问题。也许在 contextAPI 中也有一种方法可以做到这一点。
| 归档时间: |
|
| 查看次数: |
14795 次 |
| 最近记录: |