Здравствуйте. Подскажите, пожалуйста. Как можно поменять состояние в родителе и после его изменения изменить определенную часть кода в ребенкё?
Родитель
class App extends React.Component {
renderSettings(){
return tooltip;
}
constructor(props) {
super(props);
this.state = {
category: 'AreaChart',
tooltip: <HoverTooltip
chartId={0}
yAccessor={ema50.accessor()}
tooltipContent={tooltipContent([ema20, ema50])}
fontSize={15}/>,
color: "Light"
};
}
handleInputTooltip(event) {
this.setState({tooltip: event.target.value});
}
render() {
return (
<form>
<div id="header">
<div id="chartsType">
<select name="category" id="category-select" onChange={this.handleInputChange}>
<option value="AreaChart">Area Chart</option>
<option value="CandleStickChart">CandleStick Chart</option>
<option value="LineAndScatterChart">Line Chart</option>
<option value="Renko">Renko Chart</option>
<option value="PointAndFigure">Point & Figure Chart</option>
<option value="Kagi">Kagi Chart</option>
<option value="HeikinAshi">Heikin Ashi Chart</option>
</select>
</div>
<div id="settings" value={this.state.tooltip} onChange={this.handleInputTooltip}>
<input type="radio" name="tooltip" value="Hover" checked={this.state.tooltip === 'Hover'}/>Hover
<input type="radio" name="tooltip" value="OHLC" checked={this.state.tooltip === 'OHLC'}/>OHLC
</div>
<div id="colorScheme" value={this.state.color} onChange={this.handleInputColor}>
<input type="radio" name="colorScheme" value="Light" checked={this.state.color === 'Light'}/>Light
<input type="radio" name="colorScheme" value="Dark" checked={this.state.color === 'Dark'}/>Dark
</div>
</div>
<div id="chartrender">
<Area/>
</div>
</form>
);
}
}
Ребёнок
class Area extends React.Component {
render() {
var { data, type, width, ratio } = this.props;
return (
<ChartCanvas ref="newAppCanvas" ratio={ratio} width={width} height={400}
margin={{ left: 50, right: 50, top: 10, bottom: 30 }}
seriesName="MSFT"
calculator={[ema20, ema50]}
data={varnew} type={type}
xAccessor={d => d.date} xScale={d3.scaleTime()}>
<Chart id={0} yExtents={d => d.close}>
<XAxis axisAt="bottom" orient="bottom" ticks={6}/>
<YAxis axisAt="left" orient="left" />
<AreaSeries yAccessor={(d) => d.close}/>
<MouseCoordinateX
at="bottom"
orient="bottom"
displayFormat={d3.timeFormat("%Y-%m-%d")} />
<MouseCoordinateY
at="right"
orient="right"
displayFormat={d3.format(".2f")} />
</Chart>
<Chart id={1}
yExtents={[d => d.volume]}
height={150} origin={(w, h) => [0, h - 150]}>
<YAxis axisAt="right" orient="right" ticks={5} tickFormat={d3.format(".0s")}/>
<BarSeries yAccessor={d => d.volume} fill={d => d.close > d.open ? "#6BA583" : "#FF0000"} />
</Chart>
{this.renderSettings()}
<CrossHairCursor />
</ChartCanvas>
);
}
}
На место где "this.renderSettings()" в зависимости от выбранного radio мне нужно подставить определенный компонент (tooltip), либо тот что по дефолту, либо такой и сделать обновление канваса уже с новым компонентом.
Как поменять состояние и передать его в наследника я понял, а вот как произвести обновление определенного места, не совсем понятно и вообще возможно ли это?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Допустим у меня в localstorage есть некие данные по ключу testObject: