react-redux的基本用法

1.创建store

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

2.reducer(接受state和action并返回新的state)

 

import { combineReducers } from "redux";
import { todo } from "./todo.js";

export default combineReducers({
  todo
});
  
const initialState = {
    list:[]
}
export function todo(state = initialStateaction){
    console.log(action.payload);
    if(action.type==="ADD_TODO"){
        console.log("=======add=========");
        let newState = JSON.parse(JSON.stringify(state));
        newState.list.push({
        content:action.payload
        });
        console.log(newState);
        return newState;
    }else if(action.type==="DEL_TODO"){
        let newState = JSON.parse(JSON.stringify(state));
        newState.list.splice(action.payload1);
        return newState;
    }else{
        return state;
    }
}
 

3.使用Provider组件


import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import {HashRouter as Router,Route,Redirect,Switchfrom "react-router-dom"
import { Provider } from "react-redux";
import store from "./store";

ReactDOM.render(
  <Provider store={store}>
    <Router>
      <Switch>
        <Route path="/admin" component={App}/> 
        <Redirect to="/admin" from="/" exact/>  
        <Redirect to="/404" />
      </Switch>
    </Router>
  </Provider>,
  document.getElementById('root')
);


4.组件里使用store

import React, { Component } from 'react'
import { connect } from 'react-redux'
class TodoList extends Component {
  componentWillMount () {
    console.log(this.props)
    this.props.addTodo();
  }
  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 {
    addTodo(){
      dispatch({
        type:"ADD_TODO",
        payload:'1111111'
      })
    },
    deleteTodo(index){
      dispatch({
        type:"DEL_TODO",
        payload:index
      })
    }
  }
}

//4、connect方法接受两个参数:mapStateToProps和mapDispatchToProps,没有则传null
export default connect(mapStateToProps,mapDispatchToProps)(TodoList);
 
 
posted @ 2021-09-24 11:21  果果1024  阅读(168)  评论(0)    收藏  举报