18 react react-redux 的编写 TodoList
1. 安装 react-redux
yarn add react-redux
2. react-redux 编写 TodoList 使所有子组件 都能使用 store
#index.js
import React from 'react';
import ReactDOM from 'react-dom';
import TodoList from './TodoList';
import { Provider } from 'react-redux';
import store from './store'
const App = (
// 使用 Provider 使 Provider 的子组件 都能获取到 store
<Provider store={store}>
<TodoList />
</Provider>
);
ReactDOM.render(App, document.getElementById('root'));
# TodoList.js
import React from 'react';
import { connect } from 'react-redux';
const TodoList = (props) => {
const { input_value, list, inputValueChange, addItem, delItem } = props;
return (
<div>
<div>
<input value={input_value} onChange={inputValueChange} />
<button onClick={addItem} type="button">提交</button>
</div>
<div>
<ul>
{
list.map((item, key)=>{
return <li key={key} index={key} onClick={delItem}>{item}</li>
})
}
</ul>
</div>
</div>
);
}
// 将 store 的 state 映射到 TodoList 的 props
const mapStateToProps = ( state )=>{
// 将 TodoList 的 props 的 input_value 的值 映射到 state 下的 input_value
// 将 TodoList 的 props 的 list 的值 映射到 state 下的 list
return {
input_value : state.input_value,
list : state.list
}
}
// props 如何对 state 内的 数据做修改 的 action 定义
// 使用 connect 之后 会自动对 redux state 修改之后进行订阅
const mapPropsToDispatch = (dispatch)=>{
return {
// 修改 输入框内 input_value 的值
inputValueChange(e){
const action = {
type : 'input_value_change',
value : e.target.value
}
console.log(action);
dispatch(action);
},
// 添加 list item
addItem(){
const action = {
type : 'add_item'
}
dispatch(action);
},
// 删除 list item
delItem(e){
const action = {
type : 'del_item',
value : e.target.getAttribute('index')
}
dispatch(action);
}
}
}
// 第一个参数为 当前组件 state 与 props 的 映射关系
// 第二个参数为 props 对当前组件的 state 修改 进行 派发
export default connect(mapStateToProps, mapPropsToDispatch)(TodoList);
#store/index.js
import {createStore} from 'redux';
import reducer from './reducer';
const store = createStore(reducer);
export default store;
#store/reducer.js
const defaultState = {
input_value : '',
list : []
}
export default (state = defaultState, action)=>{
if(action.type === 'input_value_change'){
const newState = JSON.parse(JSON.stringify(state));
newState.input_value = action.value;
return newState;
}
if(action.type === 'add_item'){
const newState = JSON.parse(JSON.stringify(state));
console.log(newState);
newState.list.push(newState.input_value);
newState.input_value = ''
return newState;
}
if(action.type === 'del_item'){
const newState = JSON.parse(JSON.stringify(state));
newState.list.splice(action.value, 1);
return newState;
}
return state;
}
18 react react-redux 的编写 TodoList的更多相关文章
- 14. react 基础 redux 的编写 TodoList 功能
1. 安装 redux 监听工具 ( 需要翻墙 ) 打开 谷歌商店 搜索 redux devtool 安装第一个即可 2. 安装 redux yarn add redux 3. 创建 一个 store ...
- react用redux 做的todolist
### 1. 创建项目 create - react - app 项目名(shop) ### 2. 进入项目,下载redux cnpm install redux --save ### 3. ...
- 13. react 基础 redux 的基本介绍 及 用 antd 编写 TodoList 的样式
1. redux 简述 当 store 内的 数据进行变更的时候 多个组件感知到 store 内的数据变化 将会被自动更新 2. redux 工作流 Store 代表数据存储 (例如: 图书馆管理 ...
- 4. react 基础 - 编写 todoList 功能
编写 TodoList 功能 react 入口 js #src/index.js import React from 'react'; import ReactDOM from 'react-dom' ...
- 教你如何在React及Redux项目中进行服务端渲染
服务端渲染(SSR: Server Side Rendering)在React项目中有着广泛的应用场景 基于React虚拟DOM的特性,在浏览器端和服务端我们可以实现同构(可以使用同一份代码来实现多端 ...
- 实例讲解react+react-router+redux
前言 总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应 ...
- 基于react+react-router+redux+socket.io+koa开发一个聊天室
最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...
- React、Redux 和 Bootstrap
使用 React.Redux 和 Bootstrap 实现 Alert 今天,我们来学习使用 React.Redux 和 Bootstrap 实现Alert. 例子 这个例子实现了弹出不同类型信息的功 ...
- immutable.js 在React、Redux中的实践以及常用API简介
immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark : https://yq.aliyu ...
随机推荐
- 「SP1043」GSS1 - Can you answer these queries I
传送门 Luogu 解题思路 这题就是 GSS3 的一个退化版,不带修改操作的区间最大子段和,没什么好讲的. 细节注意事项 咕咕咕 参考代码 #include <algorithm> #i ...
- 「POI2015」KIN
传送门 Luogu 解题思路 想要做这道题,只要会维护区间最大子段和就好了. 而这个可以用线段树维护模板点这里 对于重复的情况,我们可以对每一个位置记一个前驱表示和当前位置种类相同的前一个位置. 然后 ...
- win10下python3安装深度学习一般要用的库
matplotlib :绘图库 seaborn:基于matplotlib的图形可视化包 numpy:函数.矩阵运算库 pandas :基于numpy的结构化数据分析库 首先看一下cmd能不能使用pip ...
- vue小程序ref和v-for结合使用得到ref数组的一些问题
项目中需要对每一个民宿里的每一个房间都需要popup弹出层来介绍每一个房间,房间数据都在一个接口(此民宿)上. 主要代码如下: HTML: <view v-for='(item,index) i ...
- java字符集编码乱码问题
博客分类: web javajspservlet 最近做网页这块时碰到了正文字符乱码问题.别看这小小的一个问题,对我来说却花费了好长一段时间.现在让我慢慢分析它吧(说实话.这些有部分是从网上找的,但 ...
- eclipse中从数据库生成hibernate实体类
为什么写这篇BLOG,是因为经常有同事或网友问起我hiberante实体类的生成问题.所以下次再有人问我可以省一堆的话了,其实这个真的是很简单. 现在hibernate在项目中的应用是越 ...
- JAVA地址栏重写很详细
这几天蛋疼.看看别人url重写是怎么搞的..1.解释下什么事url重写,以及它的优缺点: URL重写,其实就是把带一大堆参数的url,变成一个看上去很规矩的url.例:/viewthread.jsp? ...
- 装系统:Win7,机子是Dell 5460,有半高的mSATA SSD
问题描述:Dell Vostro 5460有一个机械盘,有一个半高的mSATA SSD,现在想将系统重装到mSATA SSD上,但是机子BIOS的Boot选项没有mSATA,只有机械盘,怎么办? 解决 ...
- 在 Scale Up 中使用 Health Check【转】
对于多副本应用,当执行 Scale Up 操作时,新副本会作为 backend 被添加到 Service 的负载均衡中,与已有副本一起处理客户的请求.考虑到应用启动通常都需要一个准备阶段,比如加载缓存 ...
- 【pwnable.tw】 death_note
题目逻辑比较简单,大概增加和删除和打印三个功能: show函数中,打印各日记内容,由于这题没有给出libc文件,应该不需要泄露地址,估计用处不大: delete函数中,正常的free,然后指针修改为n ...