我有一个组件,它接收来自路线的某个道具 - 让我们称之为day
。然后,还有一部分还原状态 - calendar
,我使用connect()
和mapStateToProps
。现在,当日期超出日历时,在componentWillReceiveProps
我发送一个redux操作,再次重新计算日历以在其中包含日期。该操作完全同步,不发送任何请求。在那种情况下,我从反应中得到了不变的违规行为:
findComponentRoot(..., .0.1.0.$20160122): Unable to find element
我在做什么导致了这个问题?我没有做任何表格或嵌套的段落/表格。当我使用setTimeout(..)
发送操作时,一切都按预期工作,所以我猜它是一些并发问题。
这是我的组件代码的样子:
componentWillReceiveProps(props) {
if (!dateInArray(props.day, props.calendar)) {
props.actions.calculateCalendar(props.day);
// This works:
// setTimeout(() => props.actions.calculateCalendar(props.day), 0);
}
}
@autobind
dateToDiv(date) {
const date8 = toDate8(date);
return <Link className="daySelect" activeClassName="active" key={date8} to={`/date/${date8}`}>{toNiceDate(date)}</Link>
}
render () {
return <div>{this.props.calendar.map(this.dateToDiv)}</div>
}
这或多或少是我的路线的样子
<Route path='/' component={App}>
<IndexRedirect to={`date/${today8()}`}/>
<Route path='date'>
<IndexRedirect to={`${today8()}`}/>
<Route path=":day" component={DayView}/>
</Route>
</Route>