React学习笔记_远程加载数据
来源:互联网 发布:dota2比赛数据 编辑:程序博客网 时间:2024/06/01 07:33
异步加载数据 async
一、页面
二、state数据结构
state.selectedReddit
{selectedReddit: "reactjs"}
请求获取数据 state.postsByReddit
reactjs: {isFetching: false, didInvalidate: false, items: Array(26), lastUpdated: 1510757456429}
mapStateToProps:
{selectedReddit: "reactjs", posts: Array(25), isFetching: false, lastUpdated: 1510757066974, dispatch: ƒ}{selectedReddit: "frontend", posts: Array(0), isFetching: true, lastUpdated: undefined, dispatch: ƒ}
- posts 代表数据
- isFetching 是否在请求加载数据中
- lastUpdated 最后一次加载时间
- didInvalidate
三、设置初始值
state.selectedReddit : reactjs
const selectedReddit = (state = 'reactjs', action) => { switch (action.type) { case SELECT_REDDIT: return action.reddit default: return state }}
四、页面构造
- Picker select 选择加载的内容
- Posts 展示请求返回数据
class App extends Component { render() { const { selectedReddit, posts, isFetching, lastUpdated } = this.props const isEmpty = posts.length === 0 return ( <div> <Picker value={selectedReddit} onChange={this.handleChange} options={[ 'reactjs', 'frontend' ]} /> <div style={{ opacity: isFetching ? 0.5 : 1 }}> <Posts posts={posts} /> </div> </div> ) }}
四、渲染完成后开始获取数据
在 componentDidMount 中请求加载数据
componentDidMount() { const { dispatch, selectedReddit } = this.props dispatch(fetchPostsIfNeeded(selectedReddit)) }
- 获取数据前 先显示加载中
- 获取数据结束后,显示数据
export const fetchPostsIfNeeded = reddit => (dispatch, getState) => { if (shouldFetchPosts(getState(), reddit)) { return dispatch(fetchPosts(reddit)) }}const fetchPosts = reddit => dispatch => { dispatch(requestPosts(reddit)) return fetch(`https://www.reddit.com/r/${reddit}.json`) .then(response => { return response.json() }) .then(json => { console.log(json); return dispatch(receivePosts(reddit, json)) })}
五、下拉菜单
const Picker = ({ value, onChange, options }) => ( <span> <h1>{value}</h1> <select onChange={e => onChange(e.target.value)} value={value}> {options.map(option => <option value={option} key={option}> {option} </option>) } </select> </span>)export default Picker
六、下拉菜单改变后重新加载数据。
handleChange = nextReddit => { this.props.dispatch(selectReddit(nextReddit)) }
action
export const selectReddit = reddit => ({ type: SELECT_REDDIT, reddit})
reducer
const selectedReddit = (state = 'reactjs', action) => { switch (action.type) { case SELECT_REDDIT: return action.reddit default: return state }}
重新渲染组件,渲染完成后请求数据,加载数据
componentDidMount() { const { dispatch, selectedReddit } = this.props dispatch(fetchPostsIfNeeded(selectedReddit)) }
阅读全文
0 0
- React学习笔记_远程加载数据
- React学习笔记_按需加载
- React-Native学习笔记 使用ListView加载网络数据
- React学习笔记_总结
- React学习笔记_从create-react-app学习webpack
- React学习笔记_安装reacttools
- React学习笔记_动态注入reducer
- React学习笔记_安装nodejs
- React学习笔记_登录模块
- React学习笔记_常用工具 插件使用
- SAP BW R3应用_特征数据的加载——视频学习笔记07
- react学习笔记_跨域访问_1
- React学习笔记_基于Cookie的登录认证
- React Native学习笔记之--图片的加载
- RN(react native)入坑指南-08,如何加载远程数据
- ext远程加载数据
- Select2加载远程数据
- HQL数据查询基础_学习笔记
- windows10 python 2.x 机器学习和实践 开发环境搭建
- Laravel5.2微信APP支付接口
- [C/C++] 算法提高 质因数
- Java面试题-基础知识
- 样式初始化
- React学习笔记_远程加载数据
- 分布式系统Paxos算法
- qt移植输入法二
- JAVA SE — Day 11
- Python3与OpenCV3.3 图像处理(三)--Numpy数组操作
- java日常学习:集合(一)
- 01背包问题优化与java代码的详解(动态规划)
- PAT (Basic Level) Practise (中文)1065. 单身狗(25)
- paxos-分布式系统数据一致性算法学习