Как обновить реквизит после получения данных выборки - PullRequest
2 голосов
/ 05 июня 2019

Я пытаюсь получить данные из выборки и «обновить» страницу с новыми реквизитами, что их значение - это данные из выборки

submit = () => {

let user = {
  email: this.props.email,
  newuser: this.state.new_username
};

fetch("http://192.168.2.45/backend/public/api/update", {
  method: "POST",
  body: JSON.stringify(user),
  headers: new Headers({
    "Content-Type": "application/json"
  })
})
  .then(res => res.json())
  .then(responseJson=>Actions.refresh({username:responseJson}) )
  .catch(error => console.error("error:", error));

};

render () {return (

    <View style={{ alignItems: "center" }}>
      <Text style={styles.name}>{this.props.username}</Text>

    </View>

Я пытаюсь каким-то образом взять responseJson и обновить его значением my props.username, но это не похожеобновить

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Реквизиты доступны только для чтения, поэтому вы не можете напрямую обновлять их из компонента, который их получает.Государство - это механизм таких изменений.Звучит так, как будто вы получаете исходное состояние от родителя, поэтому есть несколько разных вещей, с которыми вы могли бы справиться.

Одна вещь могла бы состоять в том, чтобы ваша выборка происходила в родительском компоненте, обновитеродительское состояние, и передайте значение состояния этому компоненту как реквизиты.Таким образом, между реквизитом и состоянием нет конфликта.

Другая возможность - просто указать состояние, если оно правдиво, и в противном случае отступить к реквизиту.

constructor(props) {
  this.state = {
    username: ""
  }
}
render() {
  return (
    <View style={{ alignItems: "center" }}>
      <Text style={styles.name}>{this.state.username || this.props.username}</Text>
    </View>
  )
}

Это один из способов в основном работает, но React не рекомендует.

constructor(props) {
  this.state = {
    username: props.username
  }
}

(Во всех этих случаях вы обновляете состояние при извлечении данных, как говорит Roopak PutheVeettil в своем комментарии.)

Есть более сложные вещи, которые вы можете сделать, используя componentDidUpdate() и getDerivedStateFromProps(), если вам действительно нужно синтезировать состояние обновления и реквизиты, которые могут меняться со временем, но вам это здесь не нужно.

1 голос
/ 05 июня 2019

Используйте State Вместо Props

 fetch("http://192.168.2.45/backend/public/api/update", {
      method: "POST",
      body: JSON.stringify(user),
      headers: new Headers({
        "Content-Type": "application/json"
      })
    })
      .then(res => res.json())
      .then(responseJson=>this.setState({username:responseJson}) )
      .catch(error => console.error("error:", error));

    <View style={{ alignItems: "center" }}>
          <Text style={styles.name}>{this.state.username}</Text>

        </View>
...