react-redux 的使用

1 安装react-redux: npm install --save react-redux 

2.之前使用redux的store.subscribe监听 store的状态改变,通过store.getState函数获取store的状态值;并且需要划分ui组件和聪明组件,着实很麻烦,引入react-redux,可以改变这一切;

store定义如下,引入react-redux:

import { createStore, compose, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import reducer from './reducer';

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(reducer, composeEnhancers(
    applyMiddleware(thunk)
));

export default store;

3. 顶部组件在最外层引入store,这样所有的组件都可以使用store了;

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { Provider } from 'react-redux'
import store from './store'
const MyApp = (
    <Provider store={store}>
        <App/>
    </Provider>
)
ReactDOM.render(MyApp, document.getElementById('root'));

4.具体在组件中使用connect将 ui组件变成聪明组件:

import React, { Component } from 'react';
import './App.css';
import { connect } from 'react-redux'
import {changeInputValue,addInputValue,deleteListItem,getListData} from './store/actionCreator.js'
class App extends Component {
  constructor(props){
    super(props);
    this.state = {}
  }
  componentDidMount(){
    this.props.getListDatas();
  }
  render() {
    const {inputValue,changeInputValue,addListItem,list,deleteList} = this.props;
    return (
      <div className="App">
        <label htmlFor="box">
          输入信息
          <input id="box" 
            value = {inputValue} 
            onChange ={changeInputValue}
          />
          <button onClick={addListItem}>提交</button>
          </label>
          <ul>
          {
            list.map((item,index) => {
                return (
                  <li key={index} onClick={deleteList.bind(this,index) }>{item}</li>
                )
            })
          }
          </ul>
      </div>
    );
  }

}
const mapStateToProps = (state)=> {
  return (
    {
      inputValue:state.inputValue,
      list:state.list
    }
  )
};
const mapDispatchToProps = (dispatch)=>{
  return {
    changeInputValue(e){
      dispatch(changeInputValue(e.target.value))
    },
    addListItem(){
      dispatch(addInputValue())
    },
    deleteList(index){
      dispatch(deleteListItem(index))
    },
    getListDatas(){
      dispatch(getListData())
    }
  }
}
export default connect(mapStateToProps,mapDispatchToProps)(App);

 

posted @ 2019-03-17 19:16  小猪冒泡  阅读(179)  评论(0编辑  收藏  举报