Я кодирую приложение Gatsby с главной страницей и двумя компонентами. Значение из формы выбора будет использоваться для запроса базы данных Postgresql через запрос graphql.
Что я уже могу сделать: в компоненте формы я получаю значение из меню выбора и передаю его из этого дочернего компонента родительскому компоненту (главной странице). В компоненте данных я могу запросить базу данных с помощью graphql и получить результаты с жестко запрограммированными значениями.
Что я пока не могу сделать: получить значение из компонента выбора в компонент данных и использовать его в моем запросе graphql.
Я безуспешно пробовал разные способы получить значение, используя this.props.value1 или this.state.value1. Я также протестировал простой компонент, чтобы убедиться, что могу получить значение от родительского компонента к дочернему, и он работал без проблем. Проблема заключается в том, как я пытаюсь импортировать значение в запрашивающий компонент.
**//Data component**
let val = 88 //for hardcoded test. That works.
const DataPage = () => {
const data = useStaticQuery(query)
return (
<div>
<p>From Postgres: {data.postgres.allEstivalsList[val].nbr}</p>
</div>
)
}
const query = graphql`
{
postgres {
allAveragesList {
avg
}
allEstivalsList {
year
nbr
}
}
}
`;
export default DataPage;
**//Main page**
export default class App extends React.Component {
constructor(props) {
super(props);
}
state = {
value1: null,
// other values
}
render() {
return (
<div>
<p>Get state in main page: {this.state.value1}</p>
<DataPage val = {this.state.value1} />
<SelectForm clickHandler={y => { this.setState({ value1: y }); }} />
</div>
)
}
}
**//Form component**
export default class IndexPage extends React.Component {
state = {
value1: null,
}
handleClick = () => {
this.props.clickHandler(this.state.value1);
this.setState(prevState => {
return { value1: prevState.value1 };
});
};
render() {
return (
<Formlayout>
<p>Test -- Value for the selected year: {this.state.value1}</p>
<select onChange = {(e) => this.setState({ value1: e.target.value })}>
<option value="">-- Year --</option>
<option value="1">1901</option>
<option value="2">1902</option>
<option value="3">1903</option>
</select>
<button onClick={this.handleClick}>Go!</button>
</Formlayout>
)
}
}
Я был бы признателен за указания, как получить значение select в компоненте данных. Поскольку моя тестовая переменная val эффективно работает при использовании в запросе, я бы хотел применить к этой переменной состояние из компонента. И вот где я застрял прямо сейчас.