Как передать state.params из реагировать-навигации как реквизиты в реагировать родной - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу передать реквизиты от

this.props.navigation.navigate('LIST_PRODUCT', { product: item.product, stock: item.stock});

, но результат будет

{ 
 ...this.props,
 navigation: {
  ...,
  state: {
    ...,
    params: {
      product: 'Lenovo K5 Pro',
      stock: 5
    }
  }
 }
}

, а результат, который я хочу, будет

{ 
 ...this.props,
 product: 'Lenovo K5 Pro',
 stock: 5
}

есть ли способ передачи параметров из состояния в this.props в дочернем компоненте?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Я думаю, вы могли бы просто распространить объект состояния следующим образом:

const { navigation, ...rest } = this.props;
{
  ...rest,
  ...navigation.state.params
}

Остерегайтесь, что state.params не всегда может быть

0 голосов
/ 19 сентября 2019

попробуйте следующее решение

HomeScreen.js

class HomeScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Home Screen</Text>
        <Button
          title="Go to Details"
          onPress={() => {
            /* 1. Navigate to the Details route with params */
            this.props.navigation.navigate('Details', {
              itemId: 86,
              otherParam: 'anything you want here',
            });
          }}
        />
      </View>
    );
  }
}

DetailsScreen.js

class DetailsScreen extends React.Component {
  render() {
    /* 2. Get the param, provide a fallback value if not available */
    const { navigation } = this.props;
    const itemId = navigation.getParam('itemId', 'NO-ID');
    const otherParam = navigation.getParam('otherParam', 'some default value');

    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Details Screen</Text>
        <Text>itemId: {JSON.stringify(itemId)}</Text>
        <Text>otherParam: {JSON.stringify(otherParam)}</Text>
        <Button
          title="Go to Details... again"
          onPress={() =>
            this.props.navigation.push('Details', {
              itemId: Math.floor(Math.random() * 100),
            })
          }
        />
        <Button
          title="Go to Home"
          onPress={() => this.props.navigation.navigate('Home')}
        />
        <Button
          title="Go back"
          onPress={() => this.props.navigation.goBack()}
        />
      </View>
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...