Fork me on GitHub

react-redux简单使用

在react中使用redux

安装 React Redux
Redux 默认并不包含 React 绑定库,需要单独安装。

npm install --save redux
npm install --save react-redux

使用

  • 简单目录结构
- src
    - reduxs
        - index.js
    - app.js
    - index.js

 

准备容器组件

// /reduxs/index
import {
    createStore
} from 'redux';
var stater={
    uid:''
}
const counter = (state=stater, action) => {
  switch (action.type) {
    case "SETNAME":
      return {...state,
              uid:action.uid};
    default: return state
  }
};

const store = createStore(counter)  //创建包含指定 reducer 的 store 对象
export default store;

 

创建容器之后,我这里是做全局引入, 使用<Provider> 来 让所有容器组件都可以访问 容器

// /index
import React from "react";
import ReactDOM from "react-dom";
import App from "./app.js";
import { Provider } from "react-redux";
import store from "./redux/index.js";

ReactDOM.render(
  <Provider store={store}>  //这里做全局引入
    <App />
  </Provider>,
  document.getElementById("root")
);

 

到这里我们子组件要访问容器,我们需要将要访问容器的组件使用connect将其什为高阶组件这样我们的组件就能访问容器了

import { connect } from "react-redux";
...
...
export default connect(state => {
    return state;
  })(App);

 

关于connect的参数,这里我只使用了第一个参数,其他参数使用可参考官方文档,第一个参数是一个回调,需要传入一个参数,而我的代码就是直接将容器的state返回到props,而我们想要修改容器state的值,就需要用到dispatch来触发action修改
这里直接打印this

image

我们可以看到props有dispath方法,还有我们容器state的uid。

操作获取和修改

this.props.dispatch({ type: 'SETNAME',uid:'111' })
console.log(this.props.uid);

 

在学习过程,我们会发现一个问题,在我们组件经过connect什级后,我们打印this的结果大家在上面也看到了,那么现在我给你们看看在没经过connect之前打印是怎样的

image

没错,我们会发现history之类的经过connect之后都消失了,那么如果我们想要使用history时那该怎么弄,话不多说,看代码

import { withRouter } from "react-router-dom";

export default withRouter(
  connect(state => {
    return state;
  })(App)
);

 

看看结果

image

问题解决

关于react-redux就到这了,学习过程的一些总结,内容比较浅显,有些地方说的不好的话或有问题的话,初学者愿意接受指点

posted @ 2019-11-21 20:03  幽幽木云  阅读(214)  评论(0编辑  收藏  举报