React useContext和useReducer结合使用

父组件代码:

import React, { useEffect, useReducer } from 'react'
export const sateContext = React.createContext() // 创建并导出context
	
export default function Home (props) {
  const [ state, dispatch ] = useReducer(stateReducer,0) // 创建reducer


  function stateReducer (state, action) { // reducer处理函数
    switch (action.type) {
      case 'add':
        return state + 1;
      case 'sub':
        return state - 1;
      default:
        return state;
    }
	return(
		<sateContext.Provider value={{state,dispatch}}>  // 传入需要共享的数据和reducer,需要注意传参的方式,json格式和直接传入
          <Child />
      </sateContext.Provider>


	)
}

子组件代码 :


/*
 * @Descripttion: 
 * @version: 
 * @Author: sueRimn
 * @Date: 2021-08-24 14:04:39
 * @LastEditors: sueRimn
 * @LastEditTime: 2021-08-24 14:40:49
 */
import React, { useContext } from 'react'
import {sateContext} from '../Home' // 导入父组件创建的context
import { Button } from 'antd'


export default function Child () {
  const {state,dispatch} = useContext(sateContext)  // 通过usecontext 接收共享数据

  return (
    <div>
      {state}
      <Button onClick={() => {dispatch({type:'add'})}}></Button> // 调用dispatch
      <Button onClick={() => {dispatch({type:'sub'})}}></Button>
    </div>
  )
}

效果图:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值