reactjs - 使用 React.js 设置 useContext 和 useState 的正确方法?

标签 reactjs react-native react-hooks

我有contexts/RoomContext.tsx:

import { useState, createContext } from 'react';

const RoomContext = createContext([{}, () => {}]);

const RoomProvider = (props) => {
    const [roomState, setRoomState] = useState({ meetingSession: null, meetingResponse: {}, attendeeResponse: {} })

    return <RoomContext.Provider value={[roomState, setRoomState]}>
        {props.children}
    </RoomContext.Provider>
}
export { RoomContext, RoomProvider }

然后在我的组件 RoomPage.tsx 中,我有:

const RoomPageComponent = (props) => {
    const router = useRouter()
    const [roomState, setRoomState] = useContext(RoomContext);

    useEffect(() => {
        const createRoom = async () => {
            const roomRes = await axios.post('http://localhost:3001/live')
            console.log('roomRes', roomRes)
            setRoomState(state => ({ ...state, ...roomRes.data }))
        }

        if (router.query?.id) {
            createRoom()
        }

    }, [router])

    return <RoomPageWeb {...props} />
}

export default function RoomPage(props) {

    return (
        <RoomProvider>
            <RoomPageComponent {...props} />
        </RoomProvider>
    )
}

但我收到了有关 setRoomState 的投诉:

This expression is not callable.
  Type '{}' has no call signatures.

最佳答案

这里的问题是,您尝试在没有 RoomContext.Provider 的组件(RoomPage)中使用 RoomContext,该组件位于层次结构的较高位置,因为它在组件内呈现。

此处使用 RoomProvider 包装 RoomPage 的解决方案

import { RoomProvider, RoomContext } from '../../contexts/RoomContext'
function RoomPage(props) {
    const [roomState, setRoomState] = useContext(RoomContext);

    useEffect(() => {
        const createRoom = async () => {
            const roomRes = await axios.post('http://localhost:3001/live')
            console.log('roomRes', roomRes)
            setRoomState(state => ({...state, ...roomRes.data}))

        }
    ...

    return (

            <RoomPageWeb {...props} />
    )

export default (props) => (
    <RoomProvider><RoomPage {...props} /></RoomProvider>
)

关于reactjs - 使用 React.js 设置 useContext 和 useState 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61579848/

相关文章:

node.js - 是否可以获得存储在 Google Cloud Storage 上的图像的调整大小版本?

javascript - 如何将值设置为字符串 React-Native?

javascript - 在 ReactJS 中呈现已解决或已拒绝的 Promise 值

reactjs - 如何在 react-apollo-hooks 和 formik 中使用突变?

javascript - 将 Kendo React 包含在脚本标签中

javascript - 如何在Javascript中动态编写(react项目)

javascript - 裁剪时图像居中问题

javascript - 在 React 中实现 2 路数据绑定(bind)的性能影响

reactjs - 更干净的 React 上下文

javascript - React hooks 状态变量在重新渲染后未更新