美文网首页react-native-导航
react中useContext与useReducer 代替 r

react中useContext与useReducer 代替 r

作者: start_zjj | 来源:发表于2019-10-15 18:22 被阅读0次

    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>
        )
    }
    
    

    相关文章

      网友评论

        本文标题:react中useContext与useReducer 代替 r

        本文链接:https://www.haomeiwen.com/subject/kfosmctx.html