redux & connect
redux & connect

import React, {
  Component,
  // useState,
  // useEffect,
} from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'dva';
import dashboardRegionActions from '../actions/dashboard.region.action';
// import { MapChart } from "../MapChart";
import { SelectOption } from "./SelectOption";
import { SearchInput } from "./SearchInput";
import * as Provinces from "../Region/provinces.json";
import './index.less';
import {
  Row,
  Col,
  // Input,
  // Icon,
  // Tag,
  // Select,
  // Tooltip,
  // Tabs,
  // Radio,
  // Checkbox,
  // Table,
  // Pagination,
} from "antd";
const mapStateToProps = ({ dashboard }) => ({
  regionData: dashboard.regionData,
  // mapLoading: dashboard?.mapLoading,
});
const mapDispatchToProps = dispatch => ({
  actions: bindActionCreators(dashboardRegionActions, dispatch),
});
@connect(mapStateToProps, mapDispatchToProps,)
class SelectableIndexList extends Component {
  constructor(props) {
    super(props);
    this.state = {
      placeholder: "请输入省份名或其拼音",
      provincesList: this.selectedFilter(Provinces.default),
      initProvincesList: this.selectedFilter(Provinces.default),
    };
  }
  selectedFilter = (provinces = []) => {
    return provinces.map(obj => {
      if (obj.key === "all") {
        obj.selected = true;
      } else {
        obj.selected = false;
      }
      return obj;
    });
  };
  formatAdcode = (code = "all") => {
    let adcode = 100000;
    if (code !== "all") {
      adcode = Number(`${code}0000`);
    }
    return adcode;
  };
  provincesFilter = (provincesList, key) => {
    const result = provincesList.map(({name, key: code,}) => {
      if (code === key) {
        return {
          name,
          key: code,
          selected: true,
        };
      } else {
        return {
          name,
          key: code,
          selected: false,
        };
      }
    }) || [];
    return result;
  }
  clickCheck = (key) => {
    const {
      // regionData,
      actions: {
        changeRegion,
      },
    } = this.props;
    const {
      provincesList,
      initProvincesList,
    } = this.state;
    const newProvincesList = this.provincesFilter(provincesList, key);
    const newInitProvincesList = this.provincesFilter(initProvincesList, key);
    this.setState({
      provincesList: newProvincesList,
      initProvincesList: newInitProvincesList,
    }, () => {
      // const code = this.formatAdcode(key);
      // changeRegion(code);
      changeRegion(`${key}`);
    });
  };
  handleCheckableTagChange = (value) => {
    const {
      // provincesList,
      initProvincesList: provincesList,
    } = this.state;
    let newProvincesList = provincesList.filter(({name, key, selected}) => {
      if (name.includes(value)) {
        return {
          name,
          key,
          selected,
        };
      }
    }) || [];
    this.setState({
      provincesList: newProvincesList,
    });
  };
  inputChangeHandle = (e) => {
    let value = e.target.value;
    this.handleCheckableTagChange(value);
  };
  render() {
    const {
      placeholder,
      provincesList,
    } = this.state;
    return (
      <>
        <Row className="selectable-index-list">
          <Col span={24} className="input-box">
            {
              SearchInput({
                placeholder: placeholder,
                inputChangeHandle: this.inputChangeHandle,
              })
            }
          </Col>
          <Col span={24} className="option-box">
            <SelectOption
              provincesList={provincesList}
              clickCheck={this.clickCheck}
            />
          </Col>
        </Row>
      </>
    );
  }
}
export {
  SelectableIndexList,
};
export default SelectableIndexList;

const mapStateToProps = ({ dashboard }) => ({
  regionData: dashboard.regionData,
  // mapLoading: dashboard?.mapLoading,
});
const mapDispatchToProps = dispatch => ({
  actions: bindActionCreators(dashboardRegionActions, dispatch),
});
// export default connect(
//   mapStateToProps,
//   mapDispatchToProps,
// )(RegionChart);
// @connect(mapStateToProps, mapDispatchToProps,)
redux & connect的更多相关文章
- [Redux] Accessing Dispatch and State with Redux -- connect
		If you have props and actions, you want one component to access those props and actions, one solutio ... 
- redux connect的浅比较说明
		redux的connect方法是一个高阶组件,对包装的组件会在ShouldComponentUpdate中实现一个默认的浅比较. connect形式如下: connect([mapStateToPro ... 
- 【温故知新】—— React/Redux/React-router4基础知识&独立团Demo
		前言:React专注View层,一切皆组件:全部使用ES6语法,最新版本为React16. Redux是专注于状态管理的库,和react解耦:单一状态,单向数据流.[独立团github地址] 一.Re ... 
- 手写  redux 和 react-redux
		1.手写 redux redux.js /** * 手写 redux */ export function createStore(reducer) { // 当前状态 let currentStat ... 
- QQ音乐:React v16 新特性实践
		欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ音乐技术团队发表于云+社区专栏 自从去年9月份 React 团队发布了 v16.0 版本开始,到18年3月刚发布的 v16.3 版 ... 
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:socket.io&聊天实现
		前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ... 
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:个人中心&退出登录
		前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ... 
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:信息完善&用户列表
		前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ... 
- 【招聘App】——  React/Nodejs/MongoDB全栈项目:登录注册
		前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ... 
随机推荐
- JS小整理
			禁止右键和复制 $(document).ready( function() { document.body.oncontextmenu = document.body.ondragstart = do ... 
- js异步、事件循环(EventLoop)小结
			单线程 众所周知,JS是单线程的语言,之所以是单线程,用一句烂大街的话就是,如果两个线程同时操作一个DOM节点,那么该以哪个为准呢,虽然多线程也有办法解决,但是js毕竟是浏览器脚本语言,不需要那么复杂 ... 
- Web信息收集之搜索引擎-Zoomeye Hacking
			Web信息收集之搜索引擎-Zoomeye Hacking https://www.zoomeye.org ZoomEye(钟馗之眼)是一个面向网络空间的搜索引擎,"国产的Shodan&quo ... 
- Spring Boot构建 RESTful 风格应用
			Spring Boot构建 RESTful 风格应用 1.Spring Boot构建 RESTful 风格应用 1.1 实战 1.1.1 创建工程 1.1.2 构建实体类 1.1.4 查询定制 1.1 ... 
- Java面试(解答题二)
			1.一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他用户.备注:用户表:tb,角色字段为role,主键为id.请写出sql语句. 解答: 2.概述MVC体系结构 解答: MVC包括三类对 ... 
- Cisco的互联网络操作系统IOS和安全设备管理器SDM__备份和恢复Cisco 配置
			对路由器配置进行的任何修改存储在running-config文件中.如果在修改了running-config后没有输入copy run start命令,那么路由器重载或掉电后,修改的内容会丢失. 1. ... 
- MySQL特殊字符的转义处理
			出现问题以及问题分析 这条语句会把user_name不为空的所有记录查询出来 select * from user where user_name like concat('%','_','%') 分 ... 
- Codeforces Round #652 (Div. 2) C. RationalLee(贪心)
			题目链接:https://codeforces.com/contest/1369/problem/C 题意 将 $n$ 个数分给 $k$ 个人,每个人分 $w_i$ 个数($\sum_{i = 1}^ ... 
- 活动精彩实录 | 阿里云刘军民(米诺):Cassandra中文社区年度回顾
			点击这里观看完整视频 大家好,我是刘军民,我是阿里云数据库的产品经理,目前负责云数据库的产品规划以及相关工作.曾在2019年和多位小伙伴一起发起了中文社区,我希望有更多的小伙伴能加入到社区建设中,这样 ... 
- 5.PowerShell DSC核心概念之资源
			什么是资源? 资源为 DSC 配置提供构建基块. 资源公开可配置的属性,并包含本地配置管理器 (LCM) 调用以"使其如此"的 PowerShell 脚本函数. 系统内置资源 可在 ... 
