Используйте глобальную переменную для генерации динамического URL c (React Native) - PullRequest
1 голос
/ 16 января 2020

У меня есть сборщик данных, где я выбираю страну, и с помощью этого я создаю URL.

<View style={styles.centrado}>
          <Text style={styles.seleccion}>Elige tu País</Text>
          {this.Paises()}

          <Picker
            selectedValue={this.state.value || ""}
            style={{ height: 50, width: 120 }}
            itemStyle={styles.seleccion}
            onValueChange={(value, idx) => {
              this.setState({ value, idx });
              global.Pais = value;
              console.log({ valor: value });
               this.props.navigation.navigate("Noticias", {
                 pais: value
              });
            }}
          >
            <Picker.Item label="Seleccione" value="" />
            <Picker.Item label="Argentina" value="ar" />
            <Picker.Item label="Bolivia" value="bo" />
          </Picker>
        </View>

При первой загрузке все работает, но когда я возвращаюсь домой и выбираю другую страну, глобальную (global.Pais) переменная остается с начальным значением.

export default class noticias extends React.Component {
  state = {
    loading: true,
    noticias: []
  };

  constructor(props) {
    super(props);
    this.fetchNoticias();
  }

  fetchNoticias = async () => {
    console.log(global.Pais);

    if (!global.Pais || global.Pais == "undefined") {
      alert("Selecciona un país para ver las noticias");
      this.props.navigation.navigate("Home");
    } else if (global.Pais == "uy") {
      const response = await fetch(
        `https://prueba.${global.Pais}/wp-json/wp/v2/posts`
      );
      const res = await response.json();
      this.setState({ noticias: res, loading: false });
    } else {
      const response = await fetch(
        `https://prueba.com.${global.Pais}/wp-json/wp/v2/posts`
      );
      const res = await response.json();
      this.setState({ noticias: res, loading: false });
    }
  };

  componentDidMount() {
    this.fetchNoticias();
  }

  render() {
    const { loading, noticias } = this.state;
    if (loading) {
      return (
        <View style={styles.container}>
          <Text>Cargando .....</Text>
        </View>
      );
    }
    return (
      <View>
        <FlatList
          data={this.state.noticias}
          keyExtractor={(x, i) => i.toString()}
          renderItem={({ item }) => (
            <View>
              <TouchableOpacity
                onPress={() =>
                  this.props.navigation.navigate("Noticia", {
                    post_id: item.id
                  })
                }
              >
                <Card
                  style={{
                    shadowOffset: { width: 5, height: 5 },
                    width: "90%",
                    borderRadius: 12,
                    alignSelf: "center",
                    marginBottom: 10
                  }}
                >
                  <Card.Content>
                    <Title>{item.title.rendered}</Title>
                  </Card.Content>
                  <Card.Cover
                    source={{
                      uri:
                        item.better_featured_image.media_details.sizes.medium
                          .source_url
                    }}
                  />
                  <Card.Content>
                    <HTMLRender html={item.excerpt.rendered} />
                  </Card.Content>
                </Card>
              </TouchableOpacity>
            </View>
          )}
        />
      </View>
    );
  }
}

Как я могу ее решить?

1 Ответ

1 голос
/ 16 января 2020

Я думаю, что это не сработает, вы можете использовать response-context или redux для сохранения и обновления этого значения или

this.props.navigation.setParams({ pais: value })

, а затем получить это значение, когда оно вам понадобится

this.props.navigation.getParam('pais')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...