zoukankan      html  css  js  c++  java
  • react中useContext与useReducer 代替 redux

    1.useContext与useReducer

    主要思想:
    1.使用redux的action以及dispatch方法将数据存在一个组件中;
    2.使用createContext,useContext进行父子组件传值;

    import React ,{  }from 'react';
    import { Content } from './content'
    import { Color } from './color'
    //index页面
    export const Index =()=>{
        return(
            <div>
                  {/* Color组件作为父组件作为包裹 */}
                <Color>
                  {/* 注意父子关系才能使用 */}
                    <Content />
                </Color>
                
            </div>
        )
    }
    
    //起存储数据的redux页面,父组件
    import React ,{ createContext,useReducer } from 'react';
    export const Context = createContext({})
     {/* reducer作为变量而不是函数*/}
    const reducer = (state,action)=>{
        switch (action.type){
            case 'update_color':
                return action.color
            default :
                return 'purple'
        }
    }
    export const Color =props=>{
     {/* props是指包含子组件的结构 */}
        const [color,dispatch] = useReducer(reducer,'purple')
        return (
            <Context.Provider value={{color,dispatch}}>
                {props.children}
            </Context.Provider>
        )
    }
    
    //操作数据的子组件
    import React ,{ useState ,useContext }from 'react';
    import { Context } from './color'
    export const Content =()=>{
         {/* 这里是对象,不是数组,value是对象 */}
        const {color,dispatch} = useContext(Context)
        return(
            <div>
                <p style={{color:color}}>字体颜色是:{color}</p>
                <button onClick={()=>{dispatch({type:'update_color',color:'green'})}}>green</button>&nbsp;
                <button onClick={()=>{dispatch({type:'update_color',color:'red'})}}>red</button>
            </div>
        )
    }


    作者:start_zjj
    链接:https://www.jianshu.com/p/99d7b07ff711
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Nokia N8手机上开发Qt应用程序第一步:配置手机,使其支持Qt应用程序的运行
    Visual Studio 2010 "工具">"选项"中的VC++目录编辑功能已被否决
    删除用户 ORA04098
    把Excel转换成DataTable
    可编辑的DIV
    RDLC 错误号.
    leetcode| Add Digits
    leetcode| Integer to English Words
    leetcode|Counting Bits
    锁表了。。。
  • 原文地址:https://www.cnblogs.com/makai/p/13538557.html
Copyright © 2011-2022 走看看