react-redux-异步
##############################################
或许是不知梦的缘故,流离之人追逐幻影。
##############################################
-----------------------------------store-------------------------------------------
2 import {createStore,combineReducers} from "redux" ;//创建store 3 4 import titlereducer from "./reducers/titleReducer"; 5 import listreducer from "./reducers/listReducer"; 6 7 import {applyMiddleware,compose } from "redux"; 8 9 import reduxchunk from "redux-thunk";//npm install --save redux-thunk 10 import reduxpromise from "redux-promise";//npm install --save redux-promise 11 12 // state [] =>[1,2,3,4,5,6]=>[1,2,3,6.8..9] 13 var reducer = combineReducers({ 14 titlereducer, 15 listreducer 16 }) 17 20 21 const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; 22 const store = createStore(reducer, /* preloadedState, */ composeEnhancers( 23 applyMiddleware(reduxchunk,reduxpromise) 24 )); 27 28 export default store;
-------------------------------listreduce-----------------------------------
1 var listreducer = (prevState=[],action={})=>{ 2 //prevstate 得到的老状态, 3 //action {type:"changelist",payload:[1,2,3,4,5,6]} 4 var type=action.type; 5 6 switch(type){ 7 case "changelist": 8 return [...prevState,...action.payload] 9 default: 10 return prevState 11 } 12 return prevState; 13 // store.title=action.pa 14 } 15 16 17 export default listreducer;
------------------------------------异步发送过程------------------------------
因为上面有异步处理过程,并且能访问到store(Provider),所以好使
1 import React ,{Component} from "react"; 2 import axios from "axios"; 3 import {connect} from "react-redux"; 4 class Comingsoon extends Component{ 5 render(){ 6 return <div id="comingsoon"> 7 <ul> 8 { 9 this.props.list.map(item=> 10 <li key={item.id} > 11 12 <img src={item.poster.origin}/> 13 <h3>{item.name}</h3> 14 </li> 15 ) 16 } 17 </ul> 18 </div> 19 } 20 21 componentDidMount(){ 22 23 if(this.props.list.length==0){ 24 //让容器组件 负责ajax请求, 然后 ,存数据到store 25 this.props.getComingsoonListPromise();//访问容器组件传来的属性方法 26 } 27 } 28 } 29 30 export default connect( 31 32 (state)=>{ 33 return { 34 list:state.kerwinlist 35 }//通过 this.props.list 就能访问到 store 中的listreducer 36 }, 37 38 { 39 getComingsoonListThunk(){ 40 return (dispatch)=>{ 41 axios.get("/v4/api/film/coming-soon?__t=1540773165205&page=1&count=7").then(res=>{ 42 console.log(res.data); 43 //手动dispatch 44 dispatch({ 45 type:"changelist", 46 payload:res.data.data.films 47 }) 48 }) 49 } 50 51 }, //this.props.getComingsoonList, 52 53 getComingsoonListPromise(){ 54 return axios.get("/v4/api/film/coming-soon?__t=1540773165205&page=1&count=7").then(res=>{ 55 console.log(res.data); 56 //手动dispatch 57 return { 58 type:"changelist", 59 payload:res.data.data.films 60 } 61 }) 62 63 } //this.props.getComingsoonList 64 } 65 66 )(Comingsoon);
--------------------------------------接受信号,改变状态-------------------------
跟同步一样
1 import React ,{Component} from "react"; 2 // import store from "../../store"; 3 import {connect} from "react-redux";// 4 class Navbar extends Component{ 5 6 constructor(props) { 7 super(props); 8 } 9 componentWillMount(){ 10 11 //订阅消息 12 13 // store.subscribe(()=>{ 14 // console.log("状态修改了",store.getState()) 15 // this.setState({ 16 // title:store.getState().title 17 // }) 18 // }) 这个是redux中的操作,需要设置状态this.state 19 20 } 21 22 render(){ 23 return <div> 24 Navbar--{this.props.title2} 25 </div> 26 } 27 } 28 29 export default connect( 30 (state)=>{ 31 return { 32 title2:state.title 33 } 34 }, // mapStatetoProps 将store中的状态映射成属性 35 null 36 )(Navbar);