使用的是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实例的更多相关文章

  1. Redux React & Online Video Tutorials

    Redux React & Online Video Tutorials https://scrimba.com/@xgqfrms https://scrimba.com/c/cEwvKNud ...

  2. React初识整理(五)--Redux和Flux(解决状态传递问题)

    Flux 1.引入:在React的应⽤中,状态管理是⼀个⾮常重要的⼯作.我们不会直接对DOM节点进⾏操作,⽽是通过将数据设置给state,由state来同步UI,这种⽅式有个潜在的问题,每个组件都有独 ...

  3. React进阶篇(2) -- Redux

    前言 如果还不知道为什么要使用Redux,说明你暂时还不需要它. 三大原则 单一数据源 整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一 ...

  4. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

  5. RxJS + Redux + React = Amazing!(译二)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...

  6. Flux --> Redux --> Redux React 入门

    本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...

  7. Flux --> Redux --> Redux React 基础实例教程

    本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...

  8. Redux & React & react-redux

    Redux Redux & React & react-redux https://redux.js.org/ https://redux.js.org/api https://red ...

  9. 【共享单车】—— React后台管理系统开发手记:Redux集成开发

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  10. Flux --> Redux --> Redux React 入门 基础实例使用

    本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...

随机推荐

  1. Eclipse 的控制台console乱码

    乱码!Eclipse 的控制台console必须用GBK编码. Eclipse 的控制台必须用GBK编码.所以条件1和条件4必须同时满足否则运行的还是乱码.才能保证不是乱码. 条件1,Window   ...

  2. BZOJ2324 ZJOI2011营救皮卡丘(floyd+上下界费用流)

    虽然不一定每次都是由编号小的点向编号大的走,但一个人摧毁的顺序一定是从编号小的到编号大的.那么在摧毁据点x的过程中,其只能经过编号小于x的点.并且这样一定合法,因为可以控制其他人先去摧毁所经过的点.那 ...

  3. poj 1511 Invitation Cards(最短路中等题)

    In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...

  4. 【AGC006E】 Rotate 3x3

    Description ​ 题目链接 Solution ​ 显然每一列只能一起动,乱动则无解. ​ 对原网格按列黑白染色,显然每一列数只能在相同颜色之间交换,乱动则无解. ​ 之后考虑构造方案. ​ ...

  5. LCP 模板

    LCP Description 给定串 \(S\) . \(m\) 组询问 \((X, Y, L, R)\): 求 \(S[X,Y]\) 与 \(S[L,R]\) 的最长公共前缀. Input 第一行 ...

  6. Libre 6005 「网络流 24 题」最长递增子序列 / Luogu 2766 最长递增子序列问题(网络流,最大流)

    Libre 6005 「网络流 24 题」最长递增子序列 / Luogu 2766 最长递增子序列问题(网络流,最大流) Description 问题描述: 给定正整数序列x1,...,xn . (1 ...

  7. CF679E Bear and Bad Powers of 42

    一段时间不写线段树标记,有些生疏了 codeforces 679e Bear and Bad Powers of 42 - CHADLZX - 博客园 关键点是:42的次幂,在long long范围内 ...

  8. maven pom 中的 build——resources 标签 mybatis加载mapper类及.xml文件

    转: maven 理解 2017年12月18日 15:34:31 feicongcong 阅读数:5658   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  9. RBAC: 基于角色的访问控制(Role-Based Access Control)

    本文只讨论两种基于角色的访问控制的不同点,不涉及权限设计的数据库设计. 基于角色的访问控制(Role-Based Access Control)可分为隐式角色访问控制和显式角色访问控制. 隐式角色访问 ...

  10. 数据量越发庞大怎么办?新一代数据处理利器Greenplum来助攻

    作者:李树桓 个推数据研发工程师 前言:近年来,互联网的快速发展积累了海量大数据,而在这些大数据的处理上,不同技术栈所具备的性能也有所不同,如何快速有效地处理这些庞大的数据仓,成为很多运营者为之苦恼的 ...