采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
react中setState本身是异步操作,state不会立即更新,根据state做的相关操作就会产生相关问题,这个问题有什么好的解决办法吗?
setState本身不是异步操作,state会立即更新的。你的意思是不是在异步操作中进行 setState ?
具体你说的相关问题,可以具体提出来,我根据场景去解答
this.setState({ isLoadingMore: true }); console.log(this.state.isLoadingMore); setState之后不会立即拿到state的值,那么做的判断是不是不是很准确?
关键是你要立刻拿到state的值干嘛呢?不要自己创造需求
拿到的isLoading的值可能不对,会造成重复请求,还有loading ui切换是不是会有延迟呢?当然解决重复请求的方法有很多,只是react用的不多,最好能提一下吧。
setState 第二个参数可以接受回调函数
this.setState({ isLoadingMore: true },function(){ console.log(this.state.isLoadingMore) })
import React from 'react'import PureRenderMinxin from 'react-addons-pure-render-mixin'import {getListData} from '../../../fetch/home/home'import './style.less'import ListComponent from '../../../components/List'class List extends React.Component { constructor(props, context) { super(props, context); this.shouldComponentUpdate = PureRenderMinxin.shouldComponentUpdate.bind(this); this.state = { data: [], hasMore: false, page:0 } } render() { return ( <div> <h2 className="home-list-title">猜您喜欢</h2> { this.state.data.length ? <ListComponent data={this.state.data}/> : <div>{/*加载中...*/}</div> } { this.state.data.length } </div> ) } componentDidMount() { //获取首屏数据 const cityName = this.props.cityName; const page = 0; const result = getListData(cityName, page); this.resultHandle(result); } resultHandle(result) { result.then(res => res.json()) .then(json => { const data = json.data; const hasMore = json.hasMore; // console.log(hasMore); this.setState({ data: this.state.data.concat(data), hasMore: hasMore }) console.log(this.state.data.length); }).catch(ex => { if (__DEV__) { console.error('首页猜您喜欢获取数据报错, ', ex.message) } }); }}export default List
123
登录后可查看更多问答,登录/注册
已经对React Router4与Webpack2进行了项目升级
1.2k 13
1.5k 12
1.1k 11
1.0k 11
978 11