1.index.js文件中需要引入

a.React(把jsx编译到js需要调用一个函数, 这个函数在React叫React.createElement. 解答地址:https://segmentfault.com/q/1010000011479561,注意后面评论,查看ES6-Module),

b.ReactDOM,

c.要渲染的总组件。

示例如下:

//index.js
import React from "react";
import ReactDOM from 'react-dom';
import App from "./page/todoListRedux/app"
ReactDOM.render(<App />,document.getElementById("root"))

2.总组件中需要引入

a.React,{Component,Fragment}(Fragment页面不会渲染的包含块)

b.引入store所在位置

c.{Provider}:相当于store所作用的范围容器

d.子组件所在位置

并将总组件暴露给index

示例如下:

//app.js
import React, { Component, Fragment } from "react";
import store from "./store/store";
import { Provider } from "react-redux"; import Input from "./component/input"; export default class App extends Component {
render() {
return (
<Provider store={store}>
<Fragment>
<Input />
</Fragment>
</Provider>
)
}
}

3.store.js中需要引入

a.创建store的方法{createStore}

b.对redux的dispacth方法进行封装的方法applyMiddleware

c.rudecer(设计数据结构和actions处理)

d.thunk 实现异步action

将store暴露给总组件app.js

代码示例如下:

import { createStore, applyMiddleware } from "redux";
import reducers from "./reducers";
// import logger from "redux-logger";
import thunk from "redux-thunk"; // console.log(logger,thunk)
// import { addTodo,changeCompleted } from "./actions"
// redux-thunk实现异步action
// redux-logger是redux得日志中间件
const store = createStore(reducers,applyMiddleware(thunk))
export default store

4.actions.js

a.用变量代替action字符串

b.action接收的参数返回出去,传递给reducers

c.将action暴露给子组件(即:用户具体的操作行为)

示例如下:

export const ADD_TODO = "ADD_TODO";
export function addTodoAction({id,text}) {
return {
type: ADD_TODO,
text,
id
}
}

5.reduers.js

a.引入合并处理action方法的方法:combineReducers

b.定义state数据结构

c.定义function,根据用户操作,dispatch过来的action中的type对state数据中的具体的数据进行操作

d.合并function,将其放入reducers(注:只有合并以后的function在子组件中才能获取到)

e.将reducers暴露给store

代码示例如下:

import { combineReducers } from "redux";
const initdata = {
todoList: [{
id: 0,
text: "HTML",
completed: true
}, {
id: 1,
text: "CSS",
completed: false
}, {
id: 2,
text: "JS",
completed: true
}, {
id: 3,
text: "NodeJs",
completed: false
}],
id:4,
showType:"All"
}
function todoList(state=initdata.todoList,action){
// console.log(action)
let newArr=JSON.parse(JSON.stringify(state))
if(action.type==="ADD_TODO"){
newArr.push({
id:action.id,
text:action.text,
completed:false
})
}else if(action.type==="COMPLETED_TODO"){
newArr.map((item)=>{
if(item.id===action.id){
item.completed=!item.completed
}
return item
})
}
return newArr
}
const reducers=combineReducers({
todoList,id,showType
})
export default reducers;

6.子组件

a.引入React,{Component}

b.引入connect(连接ruducers里面的数据)

c.引入actions.js中的用户操作行为方法

d.定义组件名称,从this.props中获取自己需要的方法/数据(或参数),并根据用户行为触发不同的action,通过dispatch来对数据进行相应操作

e.连接reducers,并从中获取需要的数据放入this.props中

代码示例如下:

import React, { Component, Fragment } from "react";
import {connect} from "react-redux";
import styles from "../static/style.css"
import {changeCompleted} from "../store/actions" class List extends Component { render() {
const {dispatch,showType}=this.props
let list=this.props.todoList.filter((item)=>{
if(showType==="All"){
return item
}else if(showType==="WillDo"){
return item.completed===false
}else if(showType==="Did"){
return item.completed===true
}
})
return (
<Fragment>
<ul>
{
list.map((item,index)=>{
return <li key={index}
className={styles[item.completed?'active':""]}
onClick={()=>{
// console.log(item.id)
dispatch(changeCompleted(item.id))
}}
>{item.text}</li>
})
}
</ul>
</Fragment>
)
}
}
export default connect(function(state){
return state
})(List)

初步总结:react-redux的初步使用体验

github:https://github.com/aliAjax/reactTodoListReduxDemo.git

包含了不用redux的todoList Demo

react-redux学习初步总结的更多相关文章

  1. React Redux学习笔记

    React Router React Router 使用教程 Redux中间件middleware [译]深入浅出Redux中间件 Redux学习之一:何为middleware? ES6 ES6新特性 ...

  2. React+Redux学习笔记:React+Redux简易开发步骤

    前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...

  3. react redux学习之路

    React 自学 chapter one React新的前端思维方式 React的首要思想是通过组件(Component)来开发应用.所谓组件,简单说,指的是能够完成某个特定功能的独立的.可重用的代码 ...

  4. react与redux学习资料的整理

    **重点内容**React学习 1.新手入门可以访问react的官方网站,如果英语不是特别好的同学可以访问中文版的,具体链接http://reactjs.cn/react/index.html 首页有 ...

  5. Redux学习(3) ----- 结合React使用

    Redux 和React 进行结合, 就是用React 做UI, 因为Redux中定义了state,并且定义了改变或获取state的方法,完全可以用来进行状态管理,React中就不用保存状态了,它只要 ...

  6. react/redux组件库、模板、学习教程

    开源的有蚂蚁金服的: 1.https://pro.ant.design/index-cn 2.https://pro.ant.design/docs/getting-started-cn 3.http ...

  7. redux学习

    redux学习: 1.应用只有一个store,用于保存整个应用的所有的状态数据信息,即state,一个state对应一个页面的所需信息 注意:他只负责保存state,接收action, 从store. ...

  8. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  9. react+redux官方实例TODO从最简单的入门(6)-- 完结

    通过实现了增-->删-->改-->查,对react结合redux的机制差不多已经了解,那么把剩下的功能一起完成吧 全选 1.声明状态,这个是全选状态 2.action约定 3.red ...

  10. react+redux官方实例TODO从最简单的入门(1)-- 前言

    刚进公司的时候,一点react不会,有一个需求要改,重构页面!!!完全懵逼,一点不知道怎么办!然后就去官方文档,花了一周时间,就纯react实现了页面重构,总体来说,react还是比较简单的,由于当初 ...

随机推荐

  1. IEnumerable<T>和IQuryable<T>的区别

    https://stackoverflow.com/questions/1578778/using-iqueryable-with-linq/1578809#1578809 The main diff ...

  2. Spring之XML解析

    XML解析,我们可以通过我们常用的以下代码作为入口 也许,我们习惯使用第一种加载方式,但是以前也存在 第二种加载,并且这两种加载也有差别,下面再来分析. 先分析 第二种 使用 BeanFactory ...

  3. DevExpress VCL 19.2.3 Skin找不到皮肤

    The location where the DX Designtime Loader is looking for the skin packages has changed again ! For ...

  4. eclipse创建Maven Web项目以及无法修改Project Facets

    1.在eclipse中创建maven项目,在菜单栏的:File-->New-->other中,搜索maven则会出现Maven Project; 2.点击next继续; 3.点击next继 ...

  5. Man手册--nmap

    目录 nmap使用手册 附录: nmap使用手册 附录: NMAP(1) Nmap Reference Guide NMAP(1) NAME nmap - Network exploration to ...

  6. QT学习之深入了解信号槽

    槽函数和普通的 C++成员函数没有很大的区别.它们也可以使 virtual 的:可以被重写:可以使 public.protected 或者 private 的:可以由其它的 C++函数调用:参数可以是 ...

  7. Linux--磁盘检查简单介绍

    系统莫名其妙的掉电或磁盘发生问题非常可能导致文件系统的错乱,文件系统若发生错乱,可以使用fsck(file system check)命令进行检查. 使用权限:root用户 选项和参数: -a:检测到 ...

  8. web开发: css高级与盒模型

    一.组合选择器 二.复制选择器优先级 三.伪类选择器 四.盒模型 五.盒模型显示区域 六.盒模型布局 一.组合选择器 <!DOCTYPE html> <html> <he ...

  9. Ubuntu系统---WeChat安装

    Ubuntu安装微信教程 工具/原料 ubuntu 14.04 x86 方法/步骤 这次我用的系统是Ubuntu 14.04 x86,在网上先去下载electronic-wechat-linux ht ...

  10. BIO、NIO、AIO 有什么区别?(未完成)

    BIO.NIO.AIO 有什么区别?(未完成)