我不知道如何将对以下TripList实例的引用传递给AddTrip组件。我需要做一些这样的事情来发信号给TripList以在添加新行程后刷新数据。反应本地导航器将父组件传递给子组件
在我的render()方法,里面<Navigator>
我:
if (route.index === 1) {
return <TripList
title={route.title}
onForward={() => {
navigator.push({
title: 'Add New Trip',
index: 2,
});
}}
onBack={() => {
if (route.index > 0) {
navigator.pop();
}
}}
/>
} else {
return <AddTrip
styles={tripStyles}
title={route.title}
onBack={() => { navigator.pop(); }}
/>
}
然而,当我称之为AddTrip onBack(),增加了一趟后,我想在TripList调用刷新(),所以显示新的行程。我怎样才能把事情做好呢?我猜测我需要将TripList以某种方式传递给AddTrip,然后我可以在调用onBack()之前轻松调用refresh()。
好的,这是有道理的。我在TripList.state中保存了所有的Trips。如果我将它移动到全球范围内,它会使它更容易。然而,我不会购买最后一点关于自己更新的反应。没有办法知道我已经替换了所有的Trips - 你必须让反应替换它的某种代理检测分配 - 假设这可能在JavaScript中。这就是我改变数据时使用TripList.state和setState的原因。但是,navigator.pop()可能会确保render()被再次调用 - 我会试试看。如果你有这方面的想法,我全都听。 – Eloff
我设法让它工作。我缓存了组件上的render方法中的所有Trips,然后实现了shouldComponentUpdate(){return this.cachedTrips!== allTrips; }。 Navigator在改变场景时确实会调用它。然而,我不得不通过抓取从最初填充allTrips的回调切换到场景,因为否则它会使用空的allTrips呈现,并且不会调用shouldComponentUpdate(),直到从其导航AWAY为止。 – Eloff