redux,react-redux、redux-thunk、redux-logger、redux-promise实例
使用的是create-react-app脚手架
package.json增加反向代理
"proxy": {
"/v4": {
"target": "https://m.maizuo.com",
"changeOrigin": true,
"pathRewrite": {
"^/v4": "/v4"
},
"ws": true
}
}
redux实例:
src/index.js
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import {createStore, combineReducers} from 'redux'; // step1: 创建reducers
const reducers = combineReducers({
films: function(state=[], action) {
let {type, payload} = action;
switch(type) {
case "GET_FILM_DATA":
var newS = [...state];
newS = payload;
return newS;
default:
return state;
}
}
}) // step:2 创建store
const store = createStore(reducers, {}); // 把store传递给组件
function renderPage() {
ReactDOM.render(<App store={store} />, document.getElementById('root'));
}
renderPage(); // step3: 注册回调
store.subscribe(renderPage)
src/App.js
import React, { Component } from 'react';
import axios from 'axios'; class App extends Component {
componentDidMount() {
var that = this;
axios.get("/v4/api/film/now-playing?__t=1512647107236&page=1&count=5")
.then(function(res){
console.log(res);
that.props.store.dispatch({
type: "GET_FILM_DATA",
payload: res.data.data.films
})
})
}
render() {
var films = this.props.store.getState().films;
return (
<div>
<ul>
{
films.map((item, index)=>{
return <li key={item.id}>
<h2>{item.name}</h2>
<img src={item.cover.origin} />
</li>;
})
}
</ul>
</div>
)
}
} export default App;
react-redux、redux-logger、redux-thunk实例
src/index.js
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import {createStore, combineReducers, applyMiddleware} from 'redux';
import logger from 'redux-logger';
import ReduxThunk from 'redux-thunk';
import {Provider} from 'react-redux'; // step1: 创建reducers
const reducers = combineReducers({
films: function(state=[], action) {
let {type, payload} = action;
switch(type) {
case "GET_FILM_DATA":
var newS = [...state];
newS = payload;
return newS;
default:
return state;
}
}
}) // step:2 创建store
const store = createStore(reducers, {}, applyMiddleware(ReduxThunk, logger)); // 把store传递给组件
ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById('root'));
src/App.js
import React, { Component } from 'react';
import axios from 'axios';
import {connect} from 'react-redux'; //UI组件
class AppUI extends Component {
componentDidMount() {
this.props.getFilmData();
}
render() {
return (
<div>
<ul>
{
this.props.films.map((item, index)=>{
return <li key={item.id}>
<h2>{item.name}</h2>
<img src={item.cover.origin} />
</li>;
})
}
</ul>
</div>
)
}
} // mapStateToProps
const mapStateToProps =(state)=> {
return {
films: state.films
}
} // mapDispatchToProps
const mapDispatchToProps =(dispatch)=> { return {
getFilmData: function() {
//因为使用了thunk中间件,dispatch可传入回调函数
dispatch(function(dispatch){
axios.get("/v4/api/film/now-playing?__t=1512647107236&page=1&count=5")
.then(function(res){
console.log(res);
dispatch({
type: "GET_FILM_DATA",
payload: res.data.data.films
})
})
});
}
}
} // connect
const App = connect(mapStateToProps, mapDispatchToProps)(AppUI);
export default App;
react-redux、redux-logger、redux-promise实例
src/index.js
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import {createStore, combineReducers, applyMiddleware} from 'redux';
import logger from 'redux-logger';
import ReduxPromise from 'redux-promise';
import {Provider} from 'react-redux'; // step1: 创建reducers
const reducers = combineReducers({
films: function(state=[], action) {
let {type, payload} = action;
switch(type) {
case "GET_FILM_DATA":
console.log(payload);
var newS = [...state];
newS = payload;
return newS;
default:
return state;
}
}
}) // step:2 创建store
const store = createStore(reducers, {}, applyMiddleware(ReduxPromise, logger)); // 把store传递给组件
ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById('root'));
src/App.js
import React, { Component } from 'react';
import axios from 'axios';
import {connect} from 'react-redux'; //UI组件
class AppUI extends Component {
componentDidMount() {
this.props.getFilmData();
}
render() {
return (
<div>
<ul>
{
this.props.films.map((item, index)=>{
return <li key={item.id}>
<h2>{item.name}</h2>
<img src={item.cover.origin} />
</li>;
})
}
</ul>
</div>
)
}
} // mapStateToProps
const mapStateToProps =(state)=> {
return {
films: state.films
}
} // mapDispatchToProps
const mapDispatchToProps =(dispatch)=> {
return {
getFilmData: function() {
var promise = new Promise(function(resolve, reject){
axios.get("/v4/api/film/now-playing?__t=1512647107236&page=1&count=5")
.then(function(res){
resolve(res.data.data.films);
})
})
dispatch({ //redux-promise中间件使得redux可以处理promise对象
type: "GET_FILM_DATA",
payload: promise
})
}
}
} // connect
const App = connect(mapStateToProps, mapDispatchToProps)(AppUI);
export default App;
react中怎么做到如vue中keep-alive的效果?
vue中keep-alive是将组将存入内存,实质上我们想要是保留state,因此可以用redux保存要 keep-alive的组件状态值即可
redux,react-redux、redux-thunk、redux-logger、redux-promise实例的更多相关文章
- Redux React & Online Video Tutorials
Redux React & Online Video Tutorials https://scrimba.com/@xgqfrms https://scrimba.com/c/cEwvKNud ...
- React初识整理(五)--Redux和Flux(解决状态传递问题)
Flux 1.引入:在React的应⽤中,状态管理是⼀个⾮常重要的⼯作.我们不会直接对DOM节点进⾏操作,⽽是通过将数据设置给state,由state来同步UI,这种⽅式有个潜在的问题,每个组件都有独 ...
- React进阶篇(2) -- Redux
前言 如果还不知道为什么要使用Redux,说明你暂时还不需要它. 三大原则 单一数据源 整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一 ...
- RxJS + Redux + React = Amazing!(译一)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...
- RxJS + Redux + React = Amazing!(译二)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...
- Flux --> Redux --> Redux React 入门
本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...
- Flux --> Redux --> Redux React 基础实例教程
本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...
- Redux & React & react-redux
Redux Redux & React & react-redux https://redux.js.org/ https://redux.js.org/api https://red ...
- 【共享单车】—— React后台管理系统开发手记:Redux集成开发
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- Flux --> Redux --> Redux React 入门 基础实例使用
本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...
随机推荐
- 06.基于IDEA+Spring+Maven搭建测试项目--dubbo-consumer.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- BZOJ2768 JLOI2012冠军调查(最小割)
容易想到网络流.将每个人拆成0和1两个点.若某人值为0的话则让源连向0,否则让1连向汇,流量为1.相互认识的人之间01各自连边.跑最小割即可. #include<iostream> #in ...
- MT【96】一道三角恒等变换题
设$a,b,c$是正数,且$(a+b)(b+c)(c+a)=8$,证明不等式:$\frac{a+b+c}{3}≥[\frac{a^3+b^3+c^3}{3}]^{\frac{1}{27}}$ 评:记住 ...
- NOI2018旅游记
这居然是我第一次参加非NOIP的NOI系列赛事,有点小期待啊 前几天的UNR我暴露出了许多问题,而且翻了好多分,不过令人震惊的是假设Day1不停电(导致已经写好的T3没交上去)我居然有rk10,虽然并 ...
- Problem A: 道路建设 解题报告
一定存在一个最优解是一条链 否则可以接上去,不会更差 边权最小的边一定在这条链上 这个比较显然 可以把所有边都减去这个最后加上就行了 把链上的边按距离当前根的深度从小到大排列,设第一个零边位置为\(k ...
- Spark记录-org.apache.spark.sql.hive.HiveContext与org.apache.spark.sql.SQLContext包api分析
HiveContext/SQLContext val hiveContext=new HiveContext(new SparkContext(new SparkConf().setAppName(& ...
- Java 调用 groovy 脚本文件,groovy 访问 MongoDB
groovy 访问 MongoDB 示例: shell.groovy package db import com.gmongo.GMongoClient import com.mongodb.Basi ...
- JeeSite 4.x 树形结构的表设计和用法
有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章. 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理 ...
- IsNullOrWhiteSpace与IsNullOrEmpty
public static boolean IsNullOrEmpty(String value) { return (value == null || value.length() == 0);} ...
- 【转载】视频CDN技术原理与流程说明
视频CDN专为移动互联网视频内容分发量身定做的一套自主研发的分布式平台,该平台以深圳为中心,分布在全国各地BGP机房的服务器为边缘节点,汇聚中国电信.中国联通.中国移动.中国教育网等运营商网络资源,构 ...