【发布时间】:2021-05-07 11:59:06
【问题描述】:
我正在创建一个新应用,我希望能够将更新发布给我的朋友。一个微博网站。
我想学习如何使用 React 钩子和 React 的上下文 API 更新应用程序。我创建了以下将状态作为值的提供程序...我希望能够添加一个新帖子,然后更新该州的帖子,这样我就不必再次获取数据库(使用 firestore)我是真的想给自己节省一个对数据库的调用......
基本上,当我在状态中调用 createNewPost 时,我希望能够更新状态的当前帖子部分:state.posts 但是当我在 API 调用成功后更新状态时,我的整个帖子数组被替换因为某些原因。不知道我可能做错了什么......
import { createContext, useState } from 'react';
import { createDoc, getWhere } from '../utils/database/db';
export const PostDataContext = createContext();
const SetDataContextProvider = ({ children }) => {
const [state, setState] = useState({
posts: [],
timelinePosts: [],
createNewPost: async (collection, payload) => {
const doc = await createDoc(collection, payload)
payload.id = doc?.doc?.id;
updateStatePosts(payload);
return doc;
},
getPostsByUserId: async (userId) => {
const dataReceived = await getWhere('/posts', userId, 'userId')
setState({ ...state, posts: dataReceived })
}
});
const updateStatePosts = (payload) => {
console.log('why is state posts empty?!', state);
setState({ ...state, posts: [payload, ...state.posts] })
}
return <PostDataContext.Provider value={state}>
{children}
</PostDataContext.Provider>
}
export default SetDataContextProvider;
【问题讨论】:
-
你是怎么把
updateStatePosts传下来的? -
我只是从
createNewPost调用它,但@Drew Reese 帮助我指出了正确的方向......
标签: javascript reactjs react-hooks react-context