Javascript 如何在react native中将道具从父组件传递给子组件?

Javascript 如何在react native中将道具从父组件传递给子组件?,javascript,reactjs,react-native,Javascript,Reactjs,React Native,是否知道如何在react native中从父组件向子组件发送道具。我在react中听说过。但在react native中不知道。 我想要的是当用户按下AddToCart按钮时,它实际上被包装在可触摸不透明的onpress事件中,道具应该被发送到另一个页面。有人告诉我使用redux,但我认为这也可能发生在react native中 底线:有一个按钮,当它按下道具应该被发送到另一个页面 项目详情页面 应该从哪里发送道具 cart() { let product_id = this.props.n

是否知道如何在react native中从父组件向子组件发送道具。我在react中听说过。但在react native中不知道。 我想要的是当用户按下AddToCart按钮时,它实际上被包装在可触摸不透明的onpress事件中,道具应该被发送到另一个页面。有人告诉我使用redux,但我认为这也可能发生在react native中

底线:有一个按钮,当它按下道具应该被发送到另一个页面

项目详情页面

应该从哪里发送道具

cart() {
  let product_id = this.props.navigation.state.params.id;
  AsyncStorage.getItem('cart_id')
    .then((_id) => {
      API.post_data(_id, product_id)
        .then((data) => {
          if (data) {
            // this.props.navigation.navigate('Cart', {id: data.cart.id})
            // was using this method.But when I directly open
            // cart page it gives me an error undefined is not
            //  an object..blah blah
          }
        })
    })
}

<TouchableOpacity onPress={()=> { this.cart() }} >
    <Text>AddToCart<Text>
</TouchableOpacity>

根据React Navigation,这应该是可行的:

componentDidMount() {
  const { navigation } = this.props;
  // The 'NO-ID'  is a fallback value if the parameter is not available
  const cart_id = navigation.getParam('id', 'NO-ID');
  ...
}

未定义的错误不是对象..诸如此类诸如此类的错误是什么?@Tholle TypeError:undefined不是对象..(评估this.props.navigation.state.params.id)您可以通过“this.props.navigation.navigate('Cart',{id:data.Cart.id})”发送数据,然后只需检查是否(this.props.navigation.state.params.id){cart_id=this.props.navigation.state.params.id}我成功地获取了数据。但是如果我不单击addToCart按钮直接打开购物车页面,它会给我一个错误。未定义的不是对象。(计算此.props.navigation.state.params.id)创建一个正在更新并传递给子组件的本地状态。因此,当您按下一个按钮时,您将更新父组件中的状态,然后更新后的状态将传递给子组件。感谢您的回复。使用该方法,只有错误消失。但用户还将获得包括购物车id在内的导航功能…我只希望参数为pas从父级到子级或从一个页面到另一个页面,而不允许用户导航..仅参数…这在react Navigation中可能吗?是否希望用户在每次都不必导航到购物车页面的情况下将项目添加到购物车?最干净的方法是使用redux。但如果您确实不想使用redux,则可以在每个屏幕的状态下保留一个项目数组,比如itemsInCart。然后,每次调用navigate时,都可以将其传递到另一个屏幕。因此,每个navigate看起来都像这样。props.navigation.navigate('ScreenName',{id:data.cart.id}).我觉得这真的很不方便,但我想不出不使用redux的另一种方法。是的,我也觉得这太不方便了。我对redux有点了解。那么如何在redux中管理它呢??
componentDidMount() {
  const { navigation } = this.props;
  // The 'NO-ID'  is a fallback value if the parameter is not available
  const cart_id = navigation.getParam('id', 'NO-ID');
  ...
}