1. 安装 react-redux

  yarn add react-redux

2. react-redux 编写 TodoList 使所有子组件 都能使用 store

  #index.js

    import React from 'react';

    import ReactDOM from 'react-dom';

    import TodoList from './TodoList';

    import { Provider } from 'react-redux';

    import store from './store'

    const App = (

        // 使用 Provider 使 Provider 的子组件 都能获取到 store

        <Provider store={store}>

            <TodoList />

        </Provider>

    );

    ReactDOM.render(App, document.getElementById('root'));

  # TodoList.js   

    import React from 'react';

    import { connect } from 'react-redux';

    const TodoList = (props) => {

     const { input_value, list, inputValueChange, addItem, delItem } = props;

       return (

          <div>

                 <div>

      <input value={input_value} onChange={inputValueChange} />

               <button onClick={addItem} type="button">提交</button>

      </div>

                    <div>

             <ul>

          {

                     list.map((item, key)=>{

         return <li key={key} index={key} onClick={delItem}>{item}</li>

                              })

               }

      </ul>

      </div>

    </div>

    );

    }

    // 将 store 的 state 映射到 TodoList 的 props

    const mapStateToProps = ( state )=>{

        // 将 TodoList 的 props 的 input_value 的值 映射到 state 下的 input_value

        // 将 TodoList 的 props 的 list 的值 映射到 state 下的 list

        return {

            input_value : state.input_value,

            list : state.list

        }

    }

    // props 如何对 state 内的 数据做修改 的 action 定义

    // 使用 connect 之后 会自动对 redux state 修改之后进行订阅

    const mapPropsToDispatch = (dispatch)=>{

        return {

            // 修改 输入框内  input_value 的值

            inputValueChange(e){

                const action = {

                   type : 'input_value_change',

                    value : e.target.value

                }

                console.log(action);

               dispatch(action);

           },

            // 添加 list item

            addItem(){

                const action = {

                    type : 'add_item'

                }

                dispatch(action);

            },

           // 删除 list item

           delItem(e){

               const action = {

                   type : 'del_item',

                    value : e.target.getAttribute('index')

                }

                dispatch(action);

            }

        }

    }

    // 第一个参数为 当前组件 state 与 props 的 映射关系

    // 第二个参数为 props 对当前组件的 state 修改 进行 派发

    export default connect(mapStateToProps, mapPropsToDispatch)(TodoList);

  #store/index.js

    import {createStore} from 'redux';

    import reducer from './reducer';

    const store = createStore(reducer);

    export default store;

  #store/reducer.js    

    const defaultState = {

        input_value : '',

        list : []

    }

    export default (state = defaultState, action)=>{

        if(action.type === 'input_value_change'){

            const newState = JSON.parse(JSON.stringify(state));

            newState.input_value = action.value;

            return newState;

        }

        if(action.type === 'add_item'){

            const newState = JSON.parse(JSON.stringify(state));

            console.log(newState);

            newState.list.push(newState.input_value);

            newState.input_value = ''

            return newState;

        }

        if(action.type === 'del_item'){

            const newState = JSON.parse(JSON.stringify(state));

            newState.list.splice(action.value, 1);

            return newState;

        }

        return state;

    }


18 react react-redux 的编写 TodoList的更多相关文章

  1. 14. react 基础 redux 的编写 TodoList 功能

    1. 安装 redux 监听工具 ( 需要翻墙 ) 打开 谷歌商店 搜索 redux devtool 安装第一个即可 2. 安装 redux yarn add redux 3. 创建 一个 store ...

  2. react用redux 做的todolist

    ### 1. 创建项目  create - react - app  项目名(shop) ### 2. 进入项目,下载redux  cnpm install redux  --save  ### 3. ...

  3. 13. react 基础 redux 的基本介绍 及 用 antd 编写 TodoList 的样式

    1. redux 简述 当 store 内的 数据进行变更的时候  多个组件感知到 store 内的数据变化 将会被自动更新 2. redux 工作流 Store  代表数据存储 (例如: 图书馆管理 ...

  4. 4. react 基础 - 编写 todoList 功能

    编写 TodoList 功能 react 入口 js #src/index.js import React from 'react'; import ReactDOM from 'react-dom' ...

  5. 教你如何在React及Redux项目中进行服务端渲染

    服务端渲染(SSR: Server Side Rendering)在React项目中有着广泛的应用场景 基于React虚拟DOM的特性,在浏览器端和服务端我们可以实现同构(可以使用同一份代码来实现多端 ...

  6. 实例讲解react+react-router+redux

    前言 总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应 ...

  7. 基于react+react-router+redux+socket.io+koa开发一个聊天室

    最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...

  8. React、Redux 和 Bootstrap

    使用 React.Redux 和 Bootstrap 实现 Alert 今天,我们来学习使用 React.Redux 和 Bootstrap 实现Alert. 例子 这个例子实现了弹出不同类型信息的功 ...

  9. immutable.js 在React、Redux中的实践以及常用API简介

    immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark :  https://yq.aliyu ...

随机推荐

  1. 解决maven项目创建过慢的问题,一直resolving dependencies...

    ##方法一: 1.在创建项目时设置其Properties (我大多在创建项目时 就解决这个问题) 创建项目的时候,在Properties属性面板中添加一项:archetypeCatalog = int ...

  2. 083、Java数组之方法返回数组

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  3. 网站Webshell大马密码极速暴力爆破工具-cheetah

    Cheetah是一个基于字典的暴力密码webshel​​l工具,运行速度与猎豹猎物一样快. Cheetah的工作原理是能根据自动探测出的web服务设置相关参数一次性提交大量的探测密码进行爆破,爆破效率 ...

  4. CRM:异步加载下拉列表,三个列表出现同样的下拉框

    异步加载下拉列表,三个列表出现同样的下拉框,原因如下: Spring默认单例,如果Action是单例,那么上一次查询的结果就可能被下一次的查询所调用.所以必须配置action为多例, 如果采用单例模式 ...

  5. arm linux 移植 PHP

    背景: PHP 是世界上最好的语言. host平台 :Ubuntu 16.04 arm平台 : 3531d arm-gcc :4.9.4 php :7.1.30 zlib :1.2.11 libxml ...

  6. ThinkPad重大更新!5款创意设计PC齐发2日

    导读 日前,ThinkPad巨匠P系列专业移动工作站迎来全线更新,包括ThinkPad P1隐士2019.ThinkPad P53.ThinkPad P73.ThinkPad P43s.ThinkPa ...

  7. 二进制中1的个数(n=(n&n-1))

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题:利用Java系统提供的函数Integer.toBinaryString(n),将整数转化为二进制,之后再将二进制的0用 ...

  8. 061、Java中利用return结束方法调用

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  9. ACM-最优配餐

    题目描述: 最优配餐  时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问 ...

  10. 每天一点点之vue框架学习 - uni-app 修改上一页参数

    方法一:使用微信提供的 getCurrentPages() 来实现 // 更新上一级的数据 getPrevData(){ var pages = getCurrentPages(); var curr ...