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);

 

posted on 2018-10-30 14:47  杨学友  阅读(526)  评论(0编辑  收藏  举报

导航