最近换工作,公司需要用react,我就找来视频看了看,但是有一处不是很明白
视频中说this.setState()是异步执行的
他一般写成this.setState(() => ({}))这种函数式的样子,而不是this.setState({})这样直接传对象
我想知道这两种方法有什么区别吗?为什么说函数式的好一些
入坑react,setState一个小问题
FECoder
#1
fengyua51
#3
setState用官方的话说是不一定是同步的,this.setState(() => ({})),这种能拿到最新的值,可以参考一下https://github.com/fengyua5/blog/issues/2
非常不推荐写法,setState中不要参杂复杂逻辑。仅仅当作赋值语句使用比较好。
方法容易写出很复杂的条件赋值语句,代码会变得难理解。
这种写法的 code,我做 code review 是不会通过的。
ThaddeusJiang
#14
我只说我的经历,大家一起讨论。
贴一段同事写的代码,大家体会一下回调函数的弊端。
// 👀
loadData = (callback, reset) => {
// 这里写了一些业务逻辑,略
this.setState(
{
historyItems,
currentUser,
loaded: true,
hasMore: !(from + pageSize > total),
from: from + pageSize,
loadingMore: false,
recentHistoryId,
},
() => {
if (typeof callback === 'function') {
callback()
}
},
// 👀
this.loadData(() => {
this.pageHistoryDetail(siteId, pageId, historyId)
}, true)
// 👀
pageHistoryDetail = (siteId, pageId, historyId) => {
// 这里写了一些业务逻辑,略
this.setState(
{
cards,
historyPageTitle,
},
() => {
if (
changeHistoryCallback &&
typeof changeHistoryCallback === 'function'
) {
changeHistoryCallback(
siteId,
pageId,
historyId,
cards,
historyPageTitle,
recentHistoryId,
)
}
},
)
}
})
}
}
我的经验,只要 code review 是容忍了 setState 中写回调函数,就会有人在回调函数中写回调函数。
最后变成回调地狱