zoukankan      html  css  js  c++  java
  • 需不需要使用redux以及hook中怎么使用dvajs (reaxt-redux)

      在react项目中,用到的redux是 react-redux依赖包。通过使用高阶函数connect来连接组件,第一个参数是namespace里面唯一的state,第二个是action动作的标识。

    最开始时候我一般都是用dvajs来写数据流,没学过的可以看下https://dvajs.com/    非常简单。

    因为之前开发我们项目都是用的dvajs,后面写着写着发现,我不用dvajs不用redux也能实现,也能解决一些问题,为什么还要写稍微复杂的model呢?然后执迷于到底要不要用,不清楚是否需要用到,于是去探究了一下,下面是经典的一段话。很好的总结,解决了我的疑惑。

    需不需要使用redux:

    如果你不知道是否需要 Redux,那就是不需要它。

    只有遇到 React 实在解决不了的问题,你才需要 Redux 。

    今天看到一篇文章写的不错引用过来一下:原文连接 https://www.html.cn/qa/react/15870.html

    基础知识:

    • react的state和redux的state根本是完全不沾边的两个东西,切记不要混为一谈。react的state是存在于类组件中的一个存放自身变量的属性,redux的state整个应用的store中的某一个namespace下的状态。二者没有任何关系。

    • redux是一个独立于react的,你可以选择使用也可以选择不适用,如果您不是使用的基于redux的脚手架,那么想使用redux您是需要单独引用的。react包中并没有redux。

    • 假如您的应用中要使用redux,您是需要将react和redux关联起来的,这里有一个包叫react-redux,是用来关联react和redux的,其中有一个高阶函数叫connect,它接受两个方法,mapStateToProps和mapDispatchToProps是这两个方法将redux的state注入到了react的props中。

    redux的使用场景:

    • 如果您的React应用中状态十分多,难以维护的时候,这个时候redux是个不错的选择。(这里所说的状态就是react的state)

    • 如果您需要数据共享,即多个react组件需要用同一个数据源。

    • 如果您需要一些全局性的状态控制,比如应用中的当前登录人,我们说不定会在哪个组件中使用登录人信息,如果我们将它注册到全局redux中,那么我们就无需关系哪个组件要用了,我们用的时候直接从全局redux中取就行

    • 某组件的业务逻辑过于复杂,在react组件中处理这些数据太过繁琐,我们可以考虑将部分逻辑拆分到redux中。

    • 使用redux可以将数据和UI分离开,如果您为了实现这样的效果,您可以尝试使用redux.

    hook中使用dvajs:

    =======index.jsx文件====

    import React, { Component, useState, useEffect } from 'react';
    import { connect } from 'dva';
    
    const mapStateToProps = (state) => {
      return state['testModel'];
    };
    
    //@connect 这种语法糖写法在函数式组件不能用
    function usePage(props) { return <div> {console.log('props', props)} 测试models页面 <span onClick={() => props.dispatch({ type: 'testModel/testFetch' })}>点击</span> </div>; } export default connect(mapStateToProps, null)(usePage);

    =======model.jsx文件====

    
    export default {
      namespace: 'testModel',
    
      state: {
        data: 11111111111,
        isBoole: 222222,
      },
    
      effects: {
        * testFetch({ payload }, { call, put, select }) {
          let response = yield call(getAllProduct);
          let selectData = yield select(state => state.global);
          console.log('response', response);
          console.log('selectData', selectData);
        },
      },
    
      reducers: {
        changeCollapsible(state, { payload }) {
          return {
            ...state,
            data: payload,
          };
        },
      },
    };
  • 相关阅读:
    你爱的不爱你,转身是幸福
    按字节长度截取字符串(支持截取带HTML代码样式的字符串)
    存储过程操作类
    C# 拖动控件
    文件同步类
    c# 动态改变控件大小的方法
    虚拟世界改变现实 盛大兴建永恒之塔
    c#百钱买百鸡
    序列化类
    DLL专题之MFC规则库和扩展库
  • 原文地址:https://www.cnblogs.com/seemoon/p/12750870.html
Copyright © 2011-2022 走看看