使用的是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. Ubutnu linux 下升级python版本,以2.x升级到3.x为例

    Linux操作系统一般 都会自带python,但是python版本会比主流低,故升级python, 主要思路:自带的python的链接link文件是在/usr/bin 下,采用sudo apt-get ...

  2. AOP 如果被代理对象的方法设置了参数 而代理对象的前置方法没有设置参数 则无法拦截到

    AOP 如果被代理对象的方法设置了参数 而代理对象的前置方法没有设置参数 则无法拦截到

  3. 对象内存空间 在创建对象后 运行时 会把对象的方法放到jvm的方法区中 调用时 将方法拿到栈中 执行完后 这个方法会出栈 然后新的方法方法进栈

  4. 洛谷P4831 Scarlet loves WenHuaKe

    这道题告诉我们推式子的时候头要够铁. 题意 问一个\(n\times m\)的棋盘,摆上\(n\times 2\)个中国象棋的炮使其两两不能攻击的方案数,对\(998244353\)取模. \((n\ ...

  5. cxf 动态调用.

    import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache ...

  6. 以 BZOJ 2002 为例学习有根树LCT(Link-Cut Tree)

    以BZOJ 2002 弹飞绵羊为例学习有根树LCT(Link-Cut Tree) 注:本文非常简单,只涉及有根树LCT,对于无根树,LCT还有几个本文没有提到的操作,以后慢慢更新 =v= 知识储备 [ ...

  7. 51nod 1577 异或凑数

    思路真的是挺巧妙的. 让我惊叹,原来线性基还能这么做?!?! 好吧,这种取若干个数异或凑数的题目怎么能少的了线性基呢? 但是,问题集中在于怎么快速提取一个区间的线性基 暴力n^2 线段树维护线性基?分 ...

  8. bzoj千题计划204:bzoj2813: 奇妙的Fibonacci

    http://www.lydsy.com/JudgeOnline/problem.php?id=2813 若j能整除i,则f[j]能整除f[i] 题目就变成了求约数个数和.约数的平方和 http:// ...

  9. day63_SpringMVC学习笔记_01

    1.JAVAEE体系结构 JAVAEE体系结构图如下所示: 2.什么是springmvc? 什么是mvc? Model1 Model2 SpringMVC是什么? SpringMVC是一个web层mv ...

  10. 第9月第27天 AVAssetExportSession AVAssetExportPresetMediumQuality

    1. AVAssetExportPresetMediumQuality和 AVAssetExportPreset960x540 码率相差很大,视频大小也会相差很大 AVAssetExportPrese ...