将数据传递给 child 组件,可以通过单击按钮进行切换

Pass data to child component that can be toggled with button click

我想在单击按钮时将不同的数据传递到我的滑块组件。我想在单击按钮时传递 'true ' 或 'false'。为此,我使用了以下代码,

class DashboardV2 extends React.Component {

  constructor(props){
    super(props);
    this.state = {
        data: 5,
        edit: false
    }
}
onPress=() => {
  this.setState( { edit: !this.state.edit })}

  render() {
    const title = brand.name + ' - Dashboard v2';
    const description = brand.desc;
  const {data,edit} = this.state; 
    return (
      <div>
        <section>
          <div >
            <h1 style={{textTransform:'uppercase'}}>Communication Skills</h1>
              <p >
                {edit ? 'yes':'no'}
              </p>
              <button onClick={this.onPress}>Edit</button>
          </div>
          <div >
         <Slider1 dataParentToChild1 = {edit} />
         </div>
        </section>
      </div>
    );
  }
}

export default withStyles(styles)(DashboardV2);

如代码所示,我想在 this.state 中切换编辑变量。使用此代码可以实现切换并呈现在屏幕上,我可以通过段落标签内的 {edit ? 'yes':'no'} 清楚地看到它。但是这种编辑变量的切换不能通过专业人士传递给 Slider1 child <Slider1 dataParentToChild1 = {edit} />。请帮我解决这个问题。

我的最终目标是在单击按钮时将 true 或 false 值传递给名为 Slider1 的 child 组件。

这是Slider1组件代码,

const sliderProps = {
  width:0,    //dims[0]
  height:0,   //dims[1]
  fill: "none",
  opacity: 0.5,
  stroke: "red"
};

const domain = [0, 10];
const defaultValues = [0, 3];

class Slider1 extends Component {
  onUpdate(vals) {
    console.log(vals);
  }
  constructor(props){
    super(props);
    this.state = {
        data: this.props.dataParentToChild1
        
    }
}

  render() {
   //const {data,edit} = this.state;

 console.log(this.state)
    return (
      <div style={{ maxWidth: 600, textAlign: "center" }}>
        <Surface view={view} trbl={trbl}>
          <Slider
            mode={1}
            step={1}
            flatten
            domain={domain}
            component="rect"
            onUpdate={this.onUpdate}
            rootProps={sliderProps}
            values={[0,5]}   //defaultValues
          >
            <Rail>
              {({ getRailProps }) => <SliderRail getRailProps={getRailProps} />}
            </Rail>
            <Ticks>
              {({ ticks, getHandleProps }) => (
                <g transform={`translate(0,${dims[1]})`}>
                  {ticks.map(tick => (
                    <Tick key={tick.id} tick={tick} />
                  ))}
                </g>
              )}
            </Ticks>
            <Tracks left={false} right={false}>
              {({ tracks, getTrackProps }) => (
                <g transform={`translate(0,${dims[1] / 2})`}>
                  {tracks.map(({ id, source, target }) => (
                    <Track
                      key={id}
                      source={source}
                      target={target}
                      getTrackProps={getTrackProps}
                    />
                  ))}
                </g>
              )}
            </Tracks>
            <Handles>
              {({ handles, getHandleProps }) => (
                <g transform={`translate(0,${dims[1] / 2})`}>
                  {handles.map(handle => (
                    <Handle
                      key={handle.id}
                      handle={handle}
                      domain={domain}
                      getHandleProps={getHandleProps}
                    />
                  ))}
                </g>
              )}
            </Handles>
          </Slider>
        </Surface>
      </div>
    );
  }
}

export default Slider1;

主要问题是您将道具值 dataParentToChild1 存储在子组件 state 中,这仅在构造函数中完成,并且仅调用一次。每次重新渲染组件时都不会调用构造函数(例如,当 prop 值更改时)。

在这种情况下,您也不需要像那样将 prop 存储在本地状态。相反,只需使用 prop 值。因此,在滑块组件中,删除状态,并在 render 中使用 console.log(this.props.dataParentToChild1) 检查,每次在父级中更新时,您应该会看到值发生变化。