zoukankan      html  css  js  c++  java
  • react-redux 的基本使用

    1、在src下创建redux文件夹,并新建store.js

    // store.js
    import { createStore } from 'redux';
    import reducers from './reducers/index';
    export default createStore(reducers);
    

    2、接着在redux文件下创建reducers文件夹,并新建index.js

    //index.js
    //combineReducers方法,用于 Reducer 的拆分,便于以后添加其他函数
    import { combineReducers } from "redux";
    import { todo } from "./todo.js";
    
    export default combineReducers({
      todo
    });
    
    //todo.js
    //只做了对数组增和删两个操作
    const initialState = {
      list:[]
    }
    export function todo(state = initialState, action){
      if(action.type==="ADD_TODO"){
        let newState = JSON.parse(JSON.stringify(state));
        newState.list.push({
          content:action.payload
        });
        return newState;
      }else if(action.type==="DEL_TODO"){
        let newState = JSON.parse(JSON.stringify(state));
        newState.list.splice(action.payload, 1);
        return newState;
      }else{
        return state;
      }
    }
    

    3、接着去项目的index.js文件,使用Provider组件

    //index.js
    import React from 'react';
    import ReactDOM from 'react-dom';
    import './index.css';
    import App from './App';
    import reportWebVitals from './reportWebVitals';
    
    //引入相关文件,并对根组件进行包裹,传入store
    //这样一来,App的所有子组件就默认都可以拿到state了
    import { Provider } from "react-redux";
    import store from "./redux/store";
    
    
    ReactDOM.render(
      <Provider store={store}>
        <React.StrictMode>
          <App />
        </React.StrictMode>
      </Provider>,
      document.getElementById('root')
    );
    reportWebVitals();
    

    4、组件里使用store

    //todoList.jsx
    import React, { Component } from 'react';
    //1、引入connect
    import { connect } from 'react-redux'
    
    class TodoList extends Component {
      handleDelete(index){
        this.props.deleteTodo(index);
      }
      render() {
        return (
          <div>
            <ul>
              {
                this.props.list.map((item,index)=>{
                  return (
                    <li key={index}>
                      <span>{item.content}</span>
                      <button onClick={this.handleDelete.bind(this,index)}>x</button>
                    </li>
                  )
                })
              }
            </ul>
          </div>
        )
      }
    }
    
    //2、把state里的数据映射到props里,可以通过Props使用
    const mapStateToProps = (state) =>{
      return {
        list:state.todo.list
      }
    }
    //3、把action里的方法绑定到props上,可以通过Props使用,用于修改store里的数据
    const mapDispatchToProps =(dispatch)=>{
      return {
        deleteTodo(index){
          dispatch({
            type:"DEL_TODO",
            payload:index
          })
        }
      }
    }
    
    //4、connect方法接受两个参数:mapStateToProps和mapDispatchToProps,没有则传null
    export default connect(mapStateToProps,mapDispatchToProps)(TodoList);
    
  • 相关阅读:
    java的多线程学习,第二记
    java多线程的学习
    长城
    2018-12-6
    mysql的笔记
    springboot用jpa生成表,没有外键
    idea 使用方法
    Oracle数据库中文乱码问题
    JAVA-Could not create the Java virtual machine java启动失败
    log4j日志如何在ssh中配置?
  • 原文地址:https://www.cnblogs.com/sgs123/p/14077698.html
Copyright © 2011-2022 走看看