問題描述
在PullList列表中,需要點(diǎn)擊列表的某一行,進(jìn)入列表的詳細(xì)信息。然后修改列表的信息后,返回主List中。但是今天遇到個(gè)坑,就是修改完詳細(xì)信息后。主界面沒有同步刷新??淳W(wǎng)上參考了很多帖子,都沒有解決。
參考1:沒解決,但是帖子說的很有道理,但是在我這里不適用。可以一讀,防止以后繞類似的坑。
http://www.itdecent.cn/p/d762b319cd60
參考2:其實(shí)和上面道理一樣,同樣沒解決。
http://www.itdecent.cn/p/b317fb9b6770
我自己環(huán)境:
react-native 0.57
redux
PullList
大致流程:

image.png
但是redux內(nèi)的數(shù)據(jù)已經(jīng)改變成功了,只不過是界面沒有渲染。原因也沒有找到。。。坑啊。。。
然后換了另一個(gè)辦法,就是用到了通知DeviceEventEmitter
Detail詳情界面內(nèi),點(diǎn)擊保存按鈕
//這個(gè)方法是更新redux,更新內(nèi)容是可以的,但是沒有渲染。因此數(shù)據(jù)已經(jīng)是最新的了。
this.updateDispatchDataStatus(json)
//重點(diǎn)來了,這里給List界面發(fā)送個(gè)通知,告訴界面,我刷新redux了,你要更新渲染數(shù)據(jù)。
DeviceEventEmitter.emit('left', '發(fā)送了個(gè)通知');
List界面內(nèi)
用PullList,state內(nèi)定義了:
list: (new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2
})).cloneWithRows(this.props.dispatchDataSource),
componentDidMount() {
//添加監(jiān)聽
this.deEmitter = DeviceEventEmitter.addListener('left', (a) => {
console.info(this.props.dispatchDataSource)
this.setState({
this.setState({
//收到通知然后更新list,就重新渲染了。
list: this.state.list.cloneWithRows(this.props.dispatchDataSource),
});
});
});
}
總結(jié)
還是沒有本質(zhì)的解決問題,但是這樣也達(dá)到了目的。有時(shí)間再仔細(xì)看看吧。
我的QQ337241905,如果有細(xì)節(jié)不了解可以加我。