如何在反应中使用上下文 api 将数据添加到其余 api?

Posted

技术标签:

【中文标题】如何在反应中使用上下文 api 将数据添加到其余 api?【英文标题】:how to add data to the rest api with context api in react? 【发布时间】:2021-09-20 23:35:15 【问题描述】:

我想通过操作将数据添加到 restfull api。 但是我得到了这个错误。

export const GlobalContext = createContext();
const GlobalProvider = ( children ) => 
const [userData, setUserData] = useState([]);
const [meetings, setMeetings] = useState([]);
useEffect(() => 
    fetch('http://localhost:4000/users')
        .then(res => res.json())
        .then(data => 
            setUserData(data);
            dispatch(
                type: 'CREATE_MEETING',
                paylaod: data
            )
        );
    fetch('http://localhost:4000/meeting')
        .then(res => res.json())
        .then(data => setMeetings(data));
, []);
const [state, dispatch] = useReducer(AppReducer, meetings);
//Actions
const updateProfile = (id) => 
    dispatch(
        type: 'UPDATE_PROFILE',
        payload: id
    )
;
const createMeeting = (meeting) => 
    dispatch(
        type: 'CREATE_MEETING',
        paylaod: meeting
    )
;
return (
    <GlobalContext.Provider value=
        meeting: meetings, userData, createMeeting
    >
        <MuiPickersUtilsProvider utils=DateFnsUtils>
            children
        </MuiPickersUtilsProvider>
    </GlobalContext.Provider>
)

导出默认 GlobalProvider

减速器 const reducer = (state, action) => 开关(动作类型) 案例“CREATE_MEETING”: 返回 会议:[action.payload, ...state.meetings]

    default:
        return state;

导出默认reducer;

如何使用 fetch 向 api 添加数据?

 case 'CREATE_MEETING':
        console.log(state)
        return [...state,
        fetch('http://localhost:4000/meeting', 
            method: 'POST',
            headers:  "Content-type": "Application/json" ,
            body: JSON.stringify(state)
        )
        ]  

你能帮帮我吗?

【问题讨论】:

当你在reducer中console.log(state.meetings)在return语句之前得到什么? 您确定以正确的顺序正确调用调度吗?您不打算在对http://localhost:4000/meeting fetch 的响应中调用调度吗? 我收到一个未定义的 createMeeting 操作中有错字。 paylaod 应该是 payload 【参考方案1】:

如Spreading undefined in array vs object 中所述,您在尝试传播undefined 时会遇到TypeError。

要么将您的 setMettings 包装在条件中:

data => 
    if (data) 
        setMeetings(data)
    

或者在你的 reducer 中为 state.mettings 提供默认值:

const reducer = (state, action) =>  
    switch (action.type) 
        case 'CREATE_MEETING':
            return  meeting: [action.payload, ...(state.meetings || [])] 
    

【讨论】:

以上是关于如何在反应中使用上下文 api 将数据添加到其余 api?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 RemoveItem 功能不起作用? - 上下文 API - 反应

如何将上下文 api 与反应路由器 v4 一起使用?

如何区分antMatchers与路径变量与上下文路径的其余部分[重复]

如何为特定页面创建父组件(以便能够在父级中添加反应上下文)?

如何在上下文提供程序中使用 axios get 调用来做出反应

如何将默认反应上下文值设置为来自 Firestore 的数据?