zoukankan      html  css  js  c++  java
  • React-使用react-redux

      react-redux可以方便在react中使用redux,我们就可以忘记subscribe,只需要记住reducer,action和dispatch就可以了。react-redux提供Provider和connect两个接口。

    • Provider组件应该在应用最外层,传入store即可,只用一次。
    • Connect负责从外部获取组件需要的参数。
    • Connect可以用装饰器的方式来写。

    创建stroe的时候,把原本的<Todolist/>包裹在Provider里。

    import React from 'react';
    import ReactDOM from 'react-dom';
    import { Provider } from 'react-redux';
    import store from './store';
    import TodoList from './TodoList.js';
    //定义一个组件,就是一段jsx
    //Provider 链接了store,那么Provider里所有的组件,也都能获取到store里的内容
    const App = (
    	<Provider store={store}> 
    		<TodoList/>
    	</Provider>
    );
    ReactDOM.render(App, document.getElementById('root'));
    

    在组件里导出组件的时候换种写法,要用connect。理解为让TodoList与store做链接,逻辑规则在mapStateToProps和mapDispatchToProps里定,TodoList是个ui组件,导出的是个普通组件。

    mapStateToProps:mapStateToProps把store里的数据映射到组件里,变成组件的props。它接受一个state做参数,返回一个对象。

    mapDispatchToProps:把store.dispatch方法映射到props上,变成组件的props。它接受接受一个dispatch 做参数,返回一个对象

    import React  from 'react';
    import { connect } from 'react-redux';
    const TodoList=(props)=>{
      const { inputValue , changeInpuValue ,btnClick , list , itemDelete}=props;
        return(
          <div>
            <input type="text" value={inputValue} onChange={changeInpuValue}/>
            <button onClick={btnClick}>提交</button>
            <ul>
              {
                list.map((item,index)=>{
                  return <li key={index} onClick={itemDelete}>{item} </li>
                })
              }
            </ul>
          </div>
        );
    };
    /*mapStateToProps把store里的数据映射到组件里,变成组件的props,接受一个state做参数,返回一个对象*/
    const mapStateToProps=(state)=>{
      return{
        inputValue:state.inputValue,
        list:state.list
      }
    }
    /*store.dispatch方法挂载到props上,组件里的props如何对store做修改,接受一个dispatch 做参数,返回一个对象*/
    const mapDispatchToProps=(dispatch)=>{
      return{
        changeInpuValue(e){
          const action={
            type:'change_input_value',
            value:e.target.value
          }
          dispatch(action)
        },
        btnClick(){
          const action={
            type:'btn_click'
          }
          dispatch(action)
        },
        itemDelete(e){
          console.log(e);
        }
      }
    }
    /*让TodoListu与store做链接,规则在mapStateToProps里边*/
    export default connect(mapStateToProps,mapDispatchToProps)(TodoList);
    

      

  • 相关阅读:
    windows的80端口被占用时的处理方法
    Ansible自动化运维工具安装与使用实例
    Tomcat的测试网页换成自己项目首页
    LeetCode 219. Contains Duplicate II
    LeetCode Contest 177
    LeetCode 217. Contains Duplicate
    LeetCode 216. Combination Sum III(DFS)
    LeetCode 215. Kth Largest Element in an Array(排序)
    Contest 176 LeetCode 1354. Construct Target Array With Multiple Sums(优先队列,递推)
    Contest 176
  • 原文地址:https://www.cnblogs.com/superlizhao/p/9455682.html
Copyright © 2011-2022 走看看