欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

react redux入门示例

程序员文章站 2022-05-09 08:57:06
环境准备 为了方便,这里使用create-react-app搭建react环境 create-react-app mydemo 弹出配置 如果需...

环境准备

为了方便,这里使用create-react-app搭建react环境

create-react-app mydemo

弹出配置

如果需要自定义react的配置,需要运行下面的命令把配置文件弹出来。

npm run eject

安装redux

npm i redux --save

简单理解

redux简单用法就是通过它的store来订阅和发布信息。

通过subscribe来订阅action,通过dispatch来触发action。reducer中定义来各个action要做的事情。

demo代码

reducer定义

const add = 'addgirl', remove = "removegirl";
export function reducer(state = 0, action) {
  switch (action.type) {
    case add:
      return state + 1;
    case remove:
      return state - 1;
    default:
      return 10;
  }
}

//action creator,把action封装成一个方法,这样用的时候不用每次定义,避免出错
export function addcreator() {
  return { type: add };
}
export function removecreator() {
  return { type: remove };
}

export function addasync() {
  return (dispatch, getstate) => {
    settimeout(function () {
      dispatch(addcreator());
    }, 1000);
  }
}

入口文件index.js

import react from 'react';
import reactdom from 'react-dom';
import './index.css';
import app from './app';
import registerserviceworker from './registerserviceworker';
import { createstore } from 'redux';
import thunk from 'redux-thunk';
import { reducer,addcreator,removecreaator } from './index.redux';
import { provider } from 'react-redux'
const store = createstore(reducer);
function render() {
  reactdom.render(
    <app store={store} addcreator={addcreator} removecreator={removecreator} />,
    document.getelementbyid('root')
  );
}
//封装成方法,方便下面的store的订阅调用
render();
//每当dispatch时,订阅的函数就会执行
store.subscribe(render);
registerserviceworker();

app.js

import react, { component } from 'react';
import './app.css';
class app extends component {
 render() {
  var store=this.props.store;
  var num=store.getstate();
  return (
   <div classname="app">
    <h1>现在有机关枪{this.props.num}把。</h1>
    <button onclick={() => { store.dispatch(this.props.addcreator()) }}>add</button>
    <button onclick={() => { store.dispatch(this.props.removecreator()) }}>remove</button>
   </div >
  );
 }
}
export default app;

通过store的dispatch来触发action,index.js中订阅的事件就会执行。

redux的异步执行

redux中如果需要执行异步操作,需要安装react-thunk插件

npm i react-thunk --save

同时需要redux插件的applymiddleware

关键代码

设置其实很简单,创建store时,把thunk传递给它就行了。

import thunk from 'redux-thunk';

const store = createstore(reducer, applymiddleware(thunk));

在app.js中增加一个触发异步操作的按钮,reducer中已经定义了一个异步的方法。

export function addasync() {
  return (dispatch, getstate) => {
    settimeout(function () {
      dispatch(addcreator());
    }, 1000);
  }
}

异步调用方法会返回一个有两个参数的方法,两个参数都是函数,第一个是dispatch函数,第二个是getstate函数。
dispatch触发action,getstate获取state的值。

在app.js中增加代码

<button onclick={() => { store.dispatch(this.props.addasync()) }}>addasync</button>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。