【发布时间】:2018-01-10 10:05:27
【问题描述】:
我正在尝试创建一个小应用程序,但有很多问题) 我有 3 个屏幕并使用 react-navigation 传递数据。方案如下:
1) loading screen (fetch data and save it to AsyncStorage+handling data and save to obj1 for pickers)
(pass obj1)
2)main screen (get data,render pickers based on it, take selected values and pass them next)
(pass pickers selection+input)
3)some results(get data from Asyncstorage, some calculating and render results)
所以我有两个问题。
当我从 3) 导航回 2) 时,出现屏幕 2 需要数据的错误,该数据是从屏幕 1 传递的。是的 - 我检查了这个数据是否传递到 3,然后在按下返回按钮时传递到 2,并且没有错误,但我确定这是一个不好的解决方案
第二个..试图解释)在屏幕 3 上对选择器选择进行了一些计算,所以它没有问题。但其余的需要从 AsyncStorage 获取数据,然后根据 Picker 值将其转换并呈现到 ListView。尽管我正在从 AS 获取 componentWillMount ,但它仍然需要很多时间,因此用于渲染的数据是未定义的。当然我正在使用状态,但我认为这是一个糟糕的数据处理逻辑..
UPD 所以我正在尝试将数据从子(屏幕)传递到父(index.ios.js),它定义为第一个加载视图(我正在使用导航器的堆栈屏幕)
export default class App extends Component {
constructor(props) {
super(props);
};
}
myCallback(dataFromChild) {
console.log("yeah", dataFromChild);
}
render() {
return (
<LoadingScreen callbackFromParent={this.myCallback}/>
);
}
}
和 LoadingScreen.js:
render() {
return(
<View style={{flex: 1, backgroundColor: '#dc143c', marginTop:20}}>
<Image
source={require('./WhiteLogo.png')}
style={{flex:3, height: undefined, width: undefined, marginLeft:20, marginRight:20}}
resizeMode="contain"
qwer={this.props.callbackFromParent('listInfo').bind(this)}
/>
<Spinner color='white' style={{flex:1}}/>
</View>
);
}
}
我收到一个错误“未处理的 JS 异常:this.props.callbackFromParent 不是函数”
【问题讨论】:
-
从 screen3 导航回 screen2 的错误是什么? react-native 只是保持它之前从 screen1 传递下来的状态,这还不够吗?或者你的意思是在 screen3 中你改变了一些东西,然后需要相应地更新 screen2?
-
对于screen3的逻辑,如果你真的基于screen2的picker得到了太多的数据,需要很长时间的计算,那会是多长时间呢?
ActivityIndicator足够了吗? -
@Val 所以当 screen2 加载它需要来自 screen1 的一些带有数据的对象。当我使用从 screen3 到 screen2 的后退按钮时,出现“对象未定义”之类的错误。当我将此 obj 从 screen2 传递到 screen3(它实际上不需要),然后以相同的名称返回到 screen3 时,错误就消失了。这是一个糟糕的解决方案,现在我正在尝试将它传递给屏幕的父级,但也有一些问题(已更新问题)
标签: react-native react-navigation