首页 > 其他分享 >如何React的函数式组件中使用useContext和useReducer来简单替代redux

如何React的函数式组件中使用useContext和useReducer来简单替代redux

时间:2022-12-12 20:44:38浏览次数:54  
标签:const useReducer UPDATE React export useContext user return USER

1. 首先是user.jsx

import React, { createContext, useReducer } from 'react'

const UserContext = createContext()
const user = {
    username: '',
    email: ''
}

export const UPDATE_USER = 'UPDATE_USER'
export const UPDATE_USERNAME = 'UPDATE_USERNAME'
export const UPDATE_EMAIL = 'UPDATE_UEMAIL'
export const RESET_USER = 'RESET_USER'

const userReducer = (state=user, action={type: '', payload: {}})=>{
    switch(action.type){
        case UPDATE_USER:
            return {...action.payload}
        case UPDATE_USERNAME:
            return {...state, username: action.payload}
        case UPDATE_EMAIL:
            return {...state, email: action.payload}
        case RESET_USER:
            return {...user}
        default:
            return state

    }
}

export default function UserContext(props) {
    const [state, dispatch] = useReducer(user, userReducer)

    return (
        <UserContext.Provider value={{state, dispatch}}>
            {props.children}
        </UserContext.Provider>
    )
}

2. 然后是App.jsx中引入

import React from 'react'
import UserContextWrapper from './user'

export default function App() {

  return (
    <UserContextWrapper>
        <div>App</div>
    </UserContextWrapper>
  )
}

3. 最后是child.jsx中使用

import React, { useContext } from 'react'
import { UPDATE_EMAIL, UserContext } from './user'


export default function Child() {
    const userContext = useContext(UserContext)
    const {username} = userContext.state

    return (
        <div>
            <div>username:{username}</div>
            <span>email: </span>
            <input type="text" onChange={(value)=>userContext.dispatch(UPDATE_EMAIL, value)} />
        </div>
    )
}

标签:const,useReducer,UPDATE,React,export,useContext,user,return,USER
From: https://www.cnblogs.com/pangqianjin/p/16977047.html

相关文章

  • React与Vue的区别
      React当我们使用React开发的时候,我们就是在写React组件,组件的state即数据,组件的render方法返回的是视图,组件的声明周期钩子和事件的处理,是数据的变化逻辑。更准确......
  • react项目搭建
    目前react官网已经不建议下载create-react-app脚手架到本地的方式来搭建项目了,我们可以直接用npx的方式来快速搭建react项目。我本地用的node版本是18.xxx的,如果是低版本的......
  • React中Component和PureComponent深度解析
    React.PureComponent与React.Component几乎完全相同,但React.PureComponent通过props和state的浅对比来实现shouldComponentUpdate().在PureComponent中,如果包含比较复杂的......
  • ReactNative 升级总结
    ReactNative升级总结ReactNative从0.53升级到0.63iOS项目总结1.ERRORInvariantViolation:ARThasbeenremovedfromReactNative.Itcannowbeinstalled......
  • #yyds干货盘点# react笔记之学习之props父子传值
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • #yyds干货盘点# react笔记之学习之显示日期
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • Task :react-native-clipboard_clipboard:compileDebugJavaWithJavac FAILED
    Task:react-native-clipboard_clipboard:compileDebugJavaWithJavacFAILED月深夜微凉于 2022-09-0217:57:19 发布830收藏文章标签:androidandroi......
  • React Native 0.68 安装react-native-picker报错:找不到compile
    react-native版本:0.68.2react-native-picker版本:4.3.7报错信息:Aproblemoccurredevaluatingproject':react-native-picker'.>Couldnotfindmethodcompile()......
  • react进阶用法完全指南
    React调用回调函数,正确设置this指向的三种方法通过bindthis.increment=this.increment.bind(this);通过箭头函数<buttononClick={this.multi}>点我*10</button......
  • react组件深度解读
    五、React核心是组件在React中,我们使用组件(有状态、可组合、可重用)来描述UI。在任何编程语言中,你都可以将组件视为简单的函数。React组件也一样,它的输入是props......