У меня есть две таблицы реактивных таблиц на странице.Первый показывает список сохраненных запросов.Пользователь может щелкнуть любой из сохраненных запросов, чтобы запустить результаты запроса, которые отображаются во второй таблице.Я пытаюсь показать / скрыть таблицу результатов запроса на основе логического состояния "showQueryResults".
Когда я устанавливаю значение false для свойства showQueryResults в обработчике события onClick getTDProps, ничего не происходит.Когда я помещаю тестовую кнопку в другом месте на странице, которая делает то же самое, таблица результатов запроса успешно скрывается.
<ReactTable
data={this.props.data}
columns={columns}
getTdProps={(state, rowInfo, column) => {
return {
onClick: () => {
if (rowInfo){
const row = rowInfo.row
this.setState({selectedListId: row.id, showQueryResults: false},() => {
if(column.id !== 'delete'){
if (row.search_type === 'dynamic'){
this.props.fetchQueryResults(row._original.search_criteria)
.then(this.setState({showQueryResults: true}))
} else {
this.props.fetchStaticResults(row.id)
.then(this.setState({showQueryResults: true}))
}
}
});
}
},
}}}
/>
В моей основной функции рендеринга я условно отображаю результаты запроса следующим образом:
{
this.state.showQueryResults
? <ListResults
queryResults = {this.props.queryResults}
onModalToggle = {this.handleModalToggle.bind(this)}
showSave = {false}
/>
: null
}
И, как я уже сказал, следующая кнопка тестирования успешно скрывает вышеуказанный элемент:
<button onClick={() => this.setState({showQueryResults: !this.state.showQueryResults})}>Toggle</button>
Есть мысли?
РЕДАКТИРОВАТЬ: Я также пыталсяследующее, чтобы убедиться, что fetchQueryResults завершается перед вторым setState (согласно комментариям), но это делает то же самое:
<ReactTable
data={this.props.data}
columns={columns}
getTdProps={(state, rowInfo, column) => {
return {
onClick: () => {
if (rowInfo){
const row = rowInfo.row
const handleFetchQuery = (searchCriteria) => {
return new Promise((resolve)=>{
let response = this.props.fetchQueryResults(searchCriteria)
if (response){
resolve('Success')
}
})
}
this.setState({selectedListId: row.id, showQueryResults: false},() => {
if(column.id !== 'delete'){
if (row.search_type === 'dynamic'){
handleFetchQuery(row._original.search_criteria)
.then(() => {this.setState({showQueryResults: true})})
} else {
this.props.fetchStaticResults(row.id)
.then(this.setState({showQueryResults: true}))
}
}
});
}
},
}}}