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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    BZOJ 2821: 作诗(Poetize)( 分块 )
    BZOJ 2440: [中山市选2011]完全平方数( 二分答案 + 容斥原理 + 莫比乌斯函数 )
    BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )
    BZOJ 1034: [ZJOI2008]泡泡堂BNB( 贪心 )
    BZOJ 1016: [JSOI2008]最小生成树计数( kruskal + dfs )
    BZOJ 2329: [HNOI2011]括号修复( splay )
    BZOJ 3143: [Hnoi2013]游走( 高斯消元 )
    BZOJAC400题留念
    BZOJ 2982: combination( lucas )
    poj 3233
  • 原文地址:https://www.cnblogs.com/makai/p/13538557.html
Copyright © 2011-2022 走看看