当前位置: 首页 > 知识库问答 >
问题:

react.js - React 状态管理 Reducer 的 dispatch 不是一个方法?

支劲
2023-06-01
  • https://codesandbox.io/s/ww49ef?file=/TasksContext.js&utm_med...
  • 模仿以上官网的示例:出现了 dispatch is not a function 报错?请问为何?

image.png

import { useParams, useLocation } from 'react-router-dom';
import { useState, useEffect } from 'react';
import { PageProvider, usePageContext } from './core/Context'

export default function Page() {

    const [list, setList] = useState<any[]>([])
    let [resource, setResource] = useState<object>({ text: "啊啊啊" })

    const dispatchPage = usePageContext();


    return <PageProvider>
        <button onClick={() => dispatchPage({ text: "修改成功"}) }>点击变化</button>
        <div>{list.map(e => e)}</div>
    </PageProvider>

}
import { createContext, useContext, useReducer } from "react";

const PageContext = createContext({})
export function usePageContext() {
    return useContext( PageContext );
}

function tasksReducer(tasks: any, action: any) {

    return { text: action.text }
}

export function PageProvider({ children } : any) {

    const [tasks, dispatch] = useReducer(
        tasksReducer,
        { text: "上下文" }
    );

    return (
        <PageContext.Provider value={tasks}>
            {children}
        </PageContext.Provider>
    );
}

共有1个答案

费星晖
2023-06-01

context的值来源于provider上的value属性。你的PageContext.Providervaluetasks也就是你usePageContext得到的是这个值,而不是dispatch这个函数

 类似资料:
  • 编辑:我重写了这个问题,以澄清我想要的--感谢到目前为止回复我的人,帮助我磨练它。 在这个人为的示例中,状态有两个主要区域,分别由和键访问。 键指向一个以作者ID为键的对象,该ID指向一个带有一些作者数据的对象。 键指向一个对象,该对象键控于具有某些发布数据的发布的ID以及一个作者数组。 从这个答案来看: reactJS-是否在调用“setstate”时调用render? React组件的函数将在

  • 本文向大家介绍在react中你是怎么进行状态管理的?相关面试题,主要包含被问及在react中你是怎么进行状态管理的?时的应答技巧和注意事项,需要的朋友参考一下 使用react-redux进行状态管理 使用redux-thunk中间件进行异步数据的处理

  • 来自服务器的数据以及是否挂起或导致错误 UI状态如切换,警报和错误消息 自定义主题,凭据和本地化 许多其他类型的状态 Redux using ng2-redux Angular Services and RxJS(推荐)

  • 管理应用程序状态是个难题。您需要在多个后端,Web workers和UI组件之间进行协调。 像Redux和Flux这样的模式旨在通过使这种协调更加明确来解决这个问题。在本文中,我将展示如何使用RxJS在几行代码中实现类似的模式。然后我将展示如何使用这种模式来实现一个简单的Angular 2应用。 在谈论架构模式时,我喜欢从描述其核心属性开始。你可以写在餐巾背上的东西。The devil, of c

  • 建议使用基于redux封装出来的rematch, anujs也自带了这个框架。 rematch的官网 https://github.com/rematch/rematch resolve: { alias: { react: "anujs", "react-dom": "anujs", rematch: "anujs/dist/Rematch.js