美文网首页
useReducer+Context的使用

useReducer+Context的使用

作者: 郁南 | 来源:发表于2019-10-07 16:28 被阅读0次

创建上下文context

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

import { Counter } from './context';

import { addCount, minusCount, reducer } from './reducers';

/**
 * {Provider,Consumer} = createContext(defaultValue)
 * defaultValue:只是初始化的值,
 * Provider:发布者,value接收的参数个数以及类型要和defaultValue一致
 * Consumer:订阅者
 */

/** 当前生成的上下文需要向外暴露给子组件使用 */
export const CountContext = createContext({ text: '', count: 0, count2: 0 });

export default function UseContext() {
  /** useReducer的第二个参数就是reducer函数接收的state */
  const [state, dispatch] = useReducer(reducer, { count: 0 });
  // 为了区分不同的useReducer
  const [state2, dispatch2] = useReducer(reducer, { num: 0 });
  const initState = 'useReducer+Context的使用'; // initState如果不是字符串,eslint会报错

  const providerValue = {
    text: initState, //普通参数
    count: state.count, //reducer参数
    count2: state2.num, //reducer参数
    count12: state2.num, //多余的参数无法接收,而且eslint会报错
  };

  return (
    <div>
      <br />
      <button onClick={() => addCount(dispatch)}>+1</button>

      <button onClick={() => minusCount(dispatch2)}>- 1</button>

      {/* Provider的value接收的值跟createContext的参数个数以及类型都要一致 */}
      <CountContext.Provider value={{ ...providerValue }}>
        <Counter></Counter>
      </CountContext.Provider>
    </div>
  );
}

useContext使用

import React, { useContext } from 'react';

import { CountContext } from './index';

export function Counter() {
  /** 利用useContext注入父组件的context上下文 */
  const { text, count, count2 } = useContext(CountContext);

  return <h2>{count + '=>' + text + '<=' + count2}</h2>;
}

reducer

import { ADD, MINUS, TIMES, DIVIDE } from './constant';


export const reducer = (state: any, action: any) => {
  switch (action.type) {
    case ADD:
      return {
        ...state,
        count: state.count + 1
      }
      break;
    case MINUS:
      return {
        ...state,
        num: state.num - 1
      }
      break;
    default:
      break;
  }
}

export const addCount = (dispatch: any) => {
  dispatch({
    type: ADD,
  });
}

export const minusCount = (dispatch: any) => {
  dispatch({
    type: MINUS,
  });
}

相关文章

  • useReducer+Context的使用

    创建上下文context useContext使用 reducer

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

  • ==的使用

    积累日常遇到的编码规范,良好的编码习惯,持续更新。。。 日常使用==用于判断的时候,习惯性将比较值写前面,变量写后...

  • this的使用

    1.默认绑定,就是函数立即执行。 函数立即执行就是指向window,但是如果是node环境,就是指向全局conso...

  • %in% 的使用

    写在前面:From 生信技能书向量难点之一:%in% 难点 (1)== 与 %in% 的区别== 强调位置,x和对...

网友评论

      本文标题:useReducer+Context的使用

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