【发布时间】:2021-01-09 21:54:15
【问题描述】:
假设我的 React 组件结构如下所示:
App
|-PostList
|-CreatePost
在 PostList 组件中,我通过从以下服务器获取数据来填充我的状态:
...
const [posts, setPosts] = useState({});
useEffect(() => {
async function fetchPosts() {
try {
const res = await axios.get(`${BACKEND_API}/posts`)
await setPosts(res.data)
} catch (e) {
console.log(e)
}
}
fetchPosts()
}, []);
并呈现这些帖子。同样,在我的 CreatePost 组件中,我创建了一个新帖子并将这些数据发送到服务器,如下所示:
...
const [title, setTitle] = useState('');
const submitHandler = async (e) => {
e.preventDefault();
await axios.post(`${BACKEND_API}/posts/create`, { title });
setTitle('')
};
...
现在问题出现了。如果不刷新页面,我就看不到我的新帖子。我尝试解决这个问题,例如在 App 组件中提升状态并将setPosts 处理程序传递给 CreatePost 组件。因为我想像这样在submitHandler 中再次更新我的帖子状态:
async function refreshPosts(setPosts) {
const res = await axios.get(`${BACKEND_API}/posts`)
await setPosts(res.data)
}
我很困惑这是正确的方式吗?正如我听说提升状态不是一个好的决定。有没有更好的解决方案?我试图避免任何状态管理库。这为这个简单的问题带来了很多额外的工作。
【问题讨论】:
-
在向服务器发送数据时,您是否向您的状态添加了一个正在存储帖子的新帖子?因为我没有看到
submitHandler
标签: reactjs react-state-management