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);
    
  • 相关阅读:
    leetcode 86. Partition List
    leetcode 303. Range Sum Query
    leetcode 1310. XOR Queries of a Subarray
    leetcode 1309. Decrypt String from Alphabet to Integer Mapping
    leetcode 215. Kth Largest Element in an Array
    将numpy.ndarray写入excel
    leetcode 1021 Remove Outermost Parentheses
    leetcode 1306. Jump Game III
    leetcode 1305. All Elements in Two Binary Search Trees
    ICCV2019 oral:Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff in Single Image Super-Resolution
  • 原文地址:https://www.cnblogs.com/sgs123/p/14077698.html
Copyright © 2011-2022 走看看