`
_wyh
  • 浏览: 61192 次
社区版块
存档分类
最新评论

一个最最简单的React-Redux使用例子

阅读更多

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。

官方文档:http://cn.redux.js.org//index.html#

 

要点(官方):应用中所有的 state 都以一个对象树的形式储存在一个单一的 store 中。

惟一改变 state 的办法是触发 action,一个描述发生什么的对象。
为了描述 action 如何改变 state 树,你需要编写 reducers

 

示例:


 点击Add Age 年龄加一,点击Sub Age 年龄减一, 第三行输入名字,点击提交,第一行名字改变。

示例非常简单,没有涉及到redux中的所有功能,只是一个redux的使用流程。

 

目录结构为:


 

步骤: 1.配置webpack。

            2.编写网页显示信息,在container中创建组件。

    (1)根组件index.js,是所有其它组件的父组件

import React, { Component, PropTypes } from 'react'
import Name from './name.js'
import Age from './age.js'
import Form from './form.js'

var App = React.createClass({
    render() {
        return (
            <div>
                <Name />
                <Age />
                <Form />
            </div>
        )
    }
});

export default App;

      (2)Name组件,输出为My name is XXX 。 其中XXX为变化的状态

               使用connect把整个的State转换为props传递给Name组件

               其中用到了dispatch。dispatch属于react-redux,但是在有效组件中使用this.props.dispatch就能获取。作用是可以分发action,从而触发reducer改变State。

import React, { Component, PropTypes } from 'react'
import { connect } from 'react-redux'

var Name = React.createClass({
    render() {
        const { name } = this.props;
        return (
            <div>
                My name is <i>{name}</i> .
            </div>
        );
    }
});

Name.PropType = {
    name: PropTypes.string.isRequired
};

function select(state) {
    return {
        name: state.inputInfo.name
    }
}

export default connect(select)(Name);

       (3)Age组件,输出 I am X years old this year. 并提供年龄更改的按钮。

                和Name一样,用connect连接。

import React, { Component, PropTypes } from 'react'
import { clickAdd, clickSub } from '../action/changeAge.js'
import { connect } from 'react-redux'

var Age = React.createClass({
    render() {
        const { age } = this.props;
        return (
            <div>
                I am {age} years old this year .
                <button onClick={this.clickAdd}>Add Age</button>
                <button onClick={this.clickSub}>Sub Age</button>
            </div>
        );
    },

    clickSub(event) {
        this.props.dispatch(clickSub());
    },

    clickAdd(event) {
        this.props.dispatch(clickAdd());
    }

});


Age.PropTypes = {
    age: PropTypes.string.isRequired
};

function select(state) {
    return {
        age: state.changeAge
    }
}

export default connect(select)(Age);

     (4)Form组件,提供输入框和确定按钮。提供把输入的字符传入到Name组件中的功能

import React, { Component, PropTypes } from 'react'
import { inputInfo } from '../action/inputInfo.js'
import { connect } from 'react-redux'


var Form = React.createClass({
    render() {
        return (
            <div>
                    <input type="text" placeholder="name" id="nameInput" />
                    <button onClick={ this.clickSubmit }>提交</button>
            </div>
        );
    },

    clickSubmit(event) {
        var name = document.getElementById('nameInput').value;
        console.log(name);
        this.props.dispatch(inputInfo(name));
    }

});

export default connect()(Form);

       

         3, 编写Action目录下的内容。根据创建的组件代码可知,需要改变状态的有三个:年龄加一,年龄减一,更改姓名。年龄加一和减一改变的都是Age中属性。所有创建两个文件changeAge.js和inputInfo.js,分别代表年龄更改和输入姓名。代码如下:

//changeAge
export const CLICK_ADD = 'CLICK_ADD';
export const CLICK_SUB = 'CLICK_SUB';

export function clickAdd() {
    return {
        type: CLICK_ADD
    }
}

export function clickSub() {
    return {
        type: CLICK_SUB
    }
}

 

//inputInfo
export const INPUT_INFO = "INPUT_INFO";

export function inputInfo(name) {
    return {
        type: INPUT_INFO,
        name
    }
}

     

          4,编写reducer。指明发生某个Action之后需要做的事。同样按照action目录分为两个文件,代码如下:

//changeAge.js
import { CLICK_ADD, CLICK_SUB } from '../action/changeAge.js'

function initialState() {
    return 20;
}

function changeAge(state=initialState(), action) {
    var value;
    switch(action.type) {
        case CLICK_ADD: {
            value = state + 1;
            return value

        }
        case CLICK_SUB: {
            value = state - 1;
            return value

        }
        default :{
            return state
        }
    }
}

export default changeAge;

 

//inputInfo.js
import { INPUT_INFO } from '../action/inputInfo.js'

function initialState() {
    return {
        name: "LiMing"
    }
}

function inputInfo(state=initialState(), action) {
    switch (action.type) {
        case INPUT_INFO: {
            return {
                name: action.name
            }
        }
        default :
            return state;
    }
}

export default inputInfo;

     

           创建好两个文件,再创建一个index文件,建立一个rootReducer,用来把刚刚创建的两个Reducer合并为一个。其中用到了combineReducers管理这两个Reducer。

import changeAge from './changeAge.js'
import inputInfo from './inputInfo.js'
import { combineReducers } from 'redux'

const rootReducer = combineReducers(
    {
        changeAge,
        inputInfo
    }
);

export default rootReducer;

     

           5,创建store。每个程序只能有一个store,可以根据已有的Reducer来创建store

import { createStore } from 'redux'
import rootReducer from '../reducer/index.js'

const store = createStore(rootReducer);

export default store;

     

          6,编写最外部的index.js,引入store。其中用到了Provider,可以保存store给子组件中的connect使用。

import App from './container/index.js'
import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import store from './store/index.js'


render(
    <div>
        <Provider store={store} >
            <App />
        </Provider>
    </div>,
    document.getElementById('content')
);

    OK!!!

 

  • 大小: 16.1 KB
  • 大小: 30.6 KB
0
1
分享到:
评论

相关推荐

    第5章、react-redux基本知识

    在React世界中,Redux是一个非常流行的 state management 库,它为单页面应用程序提供了一种集中式的状态管理方式。本章我们将深入探讨React-Redux的基本知识,特别是如何进行"合并reducer"的操作,这对于构建大型...

    react-redux-search:使用react-redux进行搜索的示例

    在“react-redux-search”项目中,这两个库被结合使用来实现一个搜索功能。 首先,让我们详细了解一下React。React使用虚拟DOM(即JSX)来描述用户界面,这使得开发者可以以声明式的方式编写代码,提高性能和开发...

    react-一个简单的redux中间件及reduxAPI

    在React开发中,Redux是一个非常流行的状态管理库,它使得应用程序的状态管理变得更为有序和可预测。本项目涉及的主题是“一个简单的Redux中间件及Redux API”,这将涵盖Redux的基本概念、中间件的工作原理以及如何...

    react-redux-counter

    React是Facebook推出的用于构建用户界面的JavaScript库,而Redux则是一个可预测化的状态容器,常与React结合使用来管理应用程序的状态。这个项目旨在展示如何在React应用中集成Redux进行状态管理。 在React中,组件...

    React 简单demo

    在这个"React简单demo"中,我们将深入探讨如何使用`create-react-app`工具创建一个基础的React项目,并集成路由配置,这对于初学者来说是一个很好的实践起点。 首先,`create-react-app`是一个官方提供的脚手架工具...

    react-redux-simple-counter:Redux基本计数器

    在本文中,我们将深入探讨如何使用React和Redux构建一个简单的计数器应用。React是一个流行的JavaScript库,用于构建用户界面,而Redux则是一种状态管理工具,可以帮助我们更好地组织和管理React应用中的状态。 ...

    react-redux:React Redux教程

    这个例子展示了如何使用React Redux来管理一个简单的计数器应用的状态。在实际项目中,你可能会有更复杂的state结构和更多的actions,但基本原理是一样的。 总的来说,React Redux提供了连接React组件和Redux store...

    redux-promise-middleware例子

    `redux-promise-middleware`是Redux生态系统中的一个中间件,它允许我们处理Promise,使得在Redux中进行异步操作变得更为简单。首先,让我们安装所需的依赖。 ### 安装依赖 为了开始我们的项目,你需要确保已经...

    react-native-redux-todolist

    本篇文章将深入探讨如何利用React Native和Redux构建一个简单的Todo列表应用。 一、React Native简介 React Native基于React.js,它将React的声明式编程模型带到了移动平台。通过JavaScript和React组件,开发者...

    antd+react+vite+redux的简单例子

    本资源“antd+react+vite+redux的简单例子”旨在展示如何将这些技术结合在一起,创建一个高效且易于维护的前端项目。 首先,React与Redux的结合是通过`react-redux`库实现的,它提供了`Provider`组件和`connect`...

    最简单的脚手架工具搭建的react实现路由和状态机demo

    在React开发中,脚手架工具(如`create-react-app`)可以帮助我们快速构建一个基础的项目结构,省去了配置构建工具、设置开发服务器等繁琐步骤。本项目"最简单的脚手架工具搭建的react实现路由和状态机demo"正是基于...

    react-翻译React简单至少99ES2015例子

    4. **React中的事件处理**:React事件处理方式与DOM事件处理不同,使用驼峰命名法,如`onClick`而不是`onclick`,并且事件处理函数接收一个合成事件对象。 5. **虚拟DOM**:React使用虚拟DOM来提高性能,通过比较...

    前端开源库-redux-addons

    `redux-thunk`是最简单的异步解决方案,它允许在action creators中返回一个函数,这个函数可以在异步操作完成后dispatch新的action。而`redux-saga`使用generator函数,提供更强大的错误处理和控制流。 2. **...

    pokemon-redux-toolkit:使用CodeSandbox创建的简单Pokemon API Webapp,并使用React + Redux(toolkit)w挂钩

    本篇文章将深入探讨如何使用CodeSandbox这个在线开发环境,以及React、Redux Toolkit和Redux本身来构建一个简单的Pokemon API Web应用。 首先,CodeSandbox是一个云托管的开发环境,它允许开发者在浏览器中编写、...

    react-native-demo:rn页面

    在这个例子中,`HelloWorldApp`是一个React组件,使用了`View`和`Text`这两个React Native内置组件。`View`是布局容器,而`Text`则用于显示文本。`style`属性接受一个对象,定义了组件的样式,这里设置了居中对齐。 ...

    universal-redux:一个 npm 包,可让您直接使用通用(同构)渲染来编写 React 和 Redux。 如果需要,仅管理 Express 设置或 Webpack 配置

    它既是 React 和 Redux 新手的一个简单起点,也是一个可扩展的基础,高级开发人员可以通过它自己的中间件进行扩充并跟上快速发展的 React 生态系统。 入门 最快的入门方法是克隆。 这为您提供了一个基本项目,该...

    redux-saga-example:这是一个迷你React项目,展示了如何使用Saga + Redux

    在React开发中,Redux是一个广泛使用的状态管理库,它帮助我们组织应用的全局状态,并确保在组件之间共享数据的一致性。而Redux Saga是Redux的一个中间件,它为处理异步操作提供了一种优雅的方式。这个名为"redux-...

    react-basic-examples:我的“ React Redux基础讲习班”的示例

    Redux则是一种状态管理工具,常与React结合使用,提供统一的状态容器,使得应用状态在多个组件间共享变得更加简单和可预测。这个名为"react-basic-examples"的项目很可能是为了教学目的,展示了React和Redux的基本...

    react-examples:我的使用React构建的示例项目

    例如,一个简单的React组件可能如下所示: ```jsx import React from 'react'; function HelloWorld() { return &lt;h1&gt;Hello, World!; } export default HelloWorld; ``` 在这个例子中,`HelloWorld`函数是一个...

    react-apps:React的例子

    例如,一个简单的React组件可能是一个按钮,而更复杂的组件可能是一个整个页面布局。 React使用JSX语法,这是一种JavaScript的扩展,允许我们在JavaScript中编写HTML样式的代码。JSX使我们可以方便地定义和组合组件...

Global site tag (gtag.js) - Google Analytics