react useReducer加useContext 实现redux全局状态共享及修改

直接代码

创建context文件

import React from 'react';
interface context {
  state: any,
  dispatch: any,
}
const Context = React.createContext<context>(null)
export default Context

根组件hooks

import React, { useMemo, useReducer } from 'react';
import Context from '@/context/index'

const reduxData = {
  name: '',
  pwd: '',
  lan: 'ch'
}
function changeRedux(state, data) {
  const [key, val] = data
  state[key] = val
  return {
    ...state
  }
}


export default function MyApp({ Component, pageProps }) {
  const [state, dispatch] = useReducer(changeRedux, reduxData)
  return (
    <Context.Provider value={{
      state,
      dispatch
    }}>
      <Component {...pageProps} />
    </Context.Provider>
  )
}

使用(所有组件都可以用)

import React, { useContext } from 'react';
import Context from '@/context/index'
import { Button } from 'antd';

const detail = () => {
  const  { state, dispatch }  = useContext(Context)
  return (
    <div>
      <Button type="primary" onClick={() => {
        dispatch(['name','zlaz'])
      }}>改变名字</Button>
      <div>name: {state.name}</div>
    </div>
  )
}

export default detail;

当点击按钮时 全局组件的状态的name更新为zlaz

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值