主框架结构

home/index.js    //模块主文件

创建Topic模块

阶段一  基础代码

import React, { Component } from 'react';
import { TopicWrapper, TopicItem } from '../style'; class Topic extends Component {
render() {
return (
<TopicWrapper>
<TopicItem>
<img className='topic-pic' src="//upload.jianshu.io/users/upload_avatars/3950651/acfaa0ce-42fe-424a-b7c8-9a0136fb96ec.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/96/h/96/format/webp"/>
</TopicItem>
</TopicWrapper>
)
}
} export default Topic;

sotre编写

编写store/index.js文件

import reducer from './reducer';
export { reducer };

编写store/reducer.js

import { fromJS } from 'immutable';
const defaultState = fromJS({
topicList: [{
id: 1,
title: '社会热点',
imgUrl: "//upload.jianshu.io/admin_banners/web_images/4318/60781ff21df1d1b03f5f8459e4a1983c009175a5.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/1250/h/540"
}, {
id: 1,
title: '社会热点',
imgUrl: "//upload.jianshu.io/admin_banners/web_images/4318/60781ff21df1d1b03f5f8459e4a1983c009175a5.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/1250/h/540"
}
],
});
export default (state = defaultState, action) => {
switch (action.type) {
default:
return state;
}
}

阶段二  Home和Topic数据连接

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { TopicWrapper, TopicItem } from '../style';
class Topic extends Component {
 
  render() {
const {list} =this.props;
    return (
      <TopicWrapper>
{list.map((item)=>( <TopicItem key={item.get('id')}>
              <img
                className='topic-pic'
                src={item.get('imgUrl')}
                alt=''
              />
              <div className='topic-title'>{item.get('title')}</div>
            </TopicItem>))}
      </TopicWrapper>
    )
  }
}
// getIn是自带函数
const mapState = (state) => ({
  list: state.getIn(['home', 'topicList'])
});
export default connect(mapState, null)(Topic);

编写假数据

数据异步动态话,在store/actionCreators.js文件里写请求数据方法

import axios from 'axios';
import * as constants from './constants';
// import { fromJS } from 'immutable';
const changHomeData = (result) => ({
  type: constants.CHANGE_HOME_DATA,
  topicList: result.topicList
});
// const addHomeList = (list, nextPage) => ({
//  type: constants.ADD_ARTICLE_LIST,
//  list: fromJS(list),
//  nextPage
// })
export const getHomeInfo = () => {
  return (dispatch) => {
    axios.get('/api/home.json').then((res) => {
      const result = res.data.data;
      dispatch(changHomeData(result));
    });
  }
}

修改store/index.js文件

import reducer from './reducer';
import * as actionCreators from './actionCreators';
import * as constants from './constants'; export { reducer, actionCreators, constants };

在home主文件index.js里调用函数

如果写完数据没有更新那就是忘记修改store/reducer.js

import { fromJS } from 'immutable';
import * as constants from './constants'; const defaultState = fromJS({
topicList: [],
});
const changeHomeData = (state, action) => {
// 更新state数据,当同时修改多个参数时用merge
return state.merge({
topicList: fromJS(action.topicList)
});
};
export default (state = defaultState, action) => {
switch (action.type) {
case constants.CHANGE_HOME_DATA:
return changeHomeData(state, action);
default:
return state;
}
}

注:在连通store时,数据链式流

mapState连接好的前提下

actionCreators(action,constants.CHANGE_HOME_DATA)-->store/reducer(action,constants.CHANGE_HOME_DATA)-->store/index-->actionCreators(dispatch)

注:在异步更新数据时,ajax获取数据后,在reducer.js中也要fromJS一下数据

最新文章

  1. ffmpeg编译常规大全
  2. IE8 jquery解析xml的兼容问题
  3. Flume应用场景及架构原理
  4. ssh和putty
  5. Java基础-数据类型int,short,char,long,float,double,boolean,byte
  6. C++的那些事:类的拷贝控制
  7. css @语法,@规则 @import @charset @font-face @fontdef @media @page
  8. adb上使用cp/mv命令的替代方法(failed on '***' - Cross-device link解决方法)
  9. 微软职位内部推荐-Software Engineer II-Web app
  10. openerp经典收藏 深入理解报表运行机制(转载)
  11. iOS/Objective-C开发 字典NSDictionary的深复制(使用category)
  12. Android开发之扫描附近wifi热点并列表显示
  13. 实现函数 isInteger(x) 来判断 x 是否是整数
  14. hdu3415:最大k子段和,单调队列
  15. c语言结构体指针必须初始化
  16. Jquery+Ajax限制查询间隔
  17. 原生js实现canvas气泡冒泡效果
  18. bzoj 2816: [ZJOI2012]网络 (LCT 建多棵树)
  19. 微信里iphone后退不刷新问题解决方案
  20. scp 实现文件打包上传到linux

热门文章

  1. 常用DOS命令及编程软件fa
  2. 三校联训 【NOIP模拟】寻找
  3. P1057传球游戏
  4. Git_初步了解
  5. PHP常用代码片段
  6. CSA Lignts Out
  7. 【网络安全】window 快速搭建 ftp 及 多种访问方式
  8. oracle函数nvl,nvl2的区别,nullif函数,coalesce函数
  9. 2019-11-29-Roslyn-如何在-Target-引用-xaml-防止文件没有编译
  10. symfony学习笔记——路由