EDIT 1 (начальная): кажется, что обратный вызов setState () работает не так, как я ожидал.Например:
this.state = {table: true}
this.setState({table: false}, ()=> console.log(this.state.table));
Выйдет из системы 'true', когда я ожидаю, что она выйдет из режима false.
РЕДАКТИРОВАТЬ 2: Я считаю, что что-то не так с тем, как яобработка моих выпадающих запросов, и это может быть причиной большинства моих проблем.Так что я собираюсь отметить это как решенное, потому что решение Дилипа должно работать.Я обновлю это через пару часов с моим результатом.
EDIT 3 (Final): я использовал оператор switch (), который каким-то образом вызывал несколько случаев и сбрасывал мое состояние.
Я думаю, что понимаю, в чем проблема, однако я не совсем уверен, как ее решить.
Я хочу условно отобразить элемент, прежде чем он будет доступен для создания из Amchart create ("elementID", chartType)функция.Я надеюсь выполнить рендеринг в выпадающем списке, вызвав следующую функцию:
loadBarChart() {
this.setState({ piechart: false, table: false, barchart: true });
var chart = am4core.create("barChartDiv", am4charts.XYChart);
chart.data = this.state.data;
let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());
categoryAxis.dataFields.category = "schoolname";
categoryAxis.title.text = "Schools";
let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis.title.text = "Number of Students";
}
И barChartDiv отображается так:
{this.state.barchart && (
<section>
<h1 style={{ textAlign: "center" }}>School Data</h1>
<div id="barChartDiv" style={{ width: "100%", height: "500px" }} />
</section>
)}
Когда я выбираю выпадающий список, мне говорят, что barchartfalse, а затем true после следующей ошибки:
Instance.js:128 Uncaught Error: html container not found
Поскольку setState () часто не обновляется немедленно.Я попытался обойти это путем включения кода loadBarChart () в функцию обратного вызова setState (), но я получаю те же ошибки, что и раньше.Так что я почти уверен, что происходит, что am4core.create () ищет элемент с идентификатором "barChartDiv" до того, как этот элемент рендерится, и поэтому я получаю ошибку html container not found.
Как лучше всего с этим справляться, если не использовать css?