Я пытаюсь установитьState () на результат запроса, который у меня есть из graphQL, но мне трудно понять, как это сделать, потому что он всегда будет загружаться или используется только из реквизита. Я сначала установил состояние
constructor (props) {
super(props);
this.state = { data: [] };
Тогда у меня есть этот запрос
const AllParams = gql`
query AllParamsQuery {
params {
id,
param,
input
}
}`
И когда он вернется, я могу получить к нему доступ с помощью this.props.AllParamsQuery.params
Как и когда мне this.setState({ data: this.props.AllParamsQuery.params })
не возвращать {data: undefined}
?
Я не нашел способа заставить его ждать, пока он undefined
AKA loading: true
затем setState
. Я пробовал componentDidMount()
и componentWillReceiveProps()
, включая async function(){...await...}
, но безуспешно, вероятно, я делаю это неправильно. Кто-нибудь знает, как это сделать правильно или есть пример?
РЕДАКТИРОВАТЬ + Ответ: вы не должны устанавливать состояние, просто оставляйте его в props. Ознакомьтесь с этой ссылкой: «Почему установка props в качестве состояния в react.js - это кощунство» http://johnnyji.me/react/2015/06/26/why-setting-props-as-state-in-react-is-blasphemy.html Проблема с обновлением реквизита - это еще одна проблема, но в этом руководстве по созданию приложения можно найти несколько отличных примеров: https://www.howtographql.com/react-apollo/8-subscriptions/