javascript - 更改子组件的状态(CSS 属性)

标签 javascript reactjs parent-child state

所以我有一个上传页面Upload,它有一个子组件Popup,它是一个弹出菜单。这里的目标是单击上传页面上的提交按钮,并更改 Popup 组件的 CSS 属性以使其可见。我对 ReactJS 相当陌生,我无法在这里找到一个问题来帮助我到达我需要的地方。

这是上传页面组件。具有带有 Submit() onClick 的按钮:

class Upload extends React.Component {
  constructor(props) {
        super(props);
        this.state = {
            submitted: false,
        };
        this.submit = this.submit.bind(this);
    }

    submit() {
      this.setState({
        submitWrapper: '500px',
        submitDetails: '300px',
        submitButton: 'block',
        opacity: '1',
        submitted: true
      });
      console.log(this.state)
    }



  render() {
    return(

          ....

           <button
            id="upload-submit"
            onClick={this.submit}>
            Submit
          </button>

           ....

           <Popup></Popup>

这是弹出组件。我在这里定义状态,但我不知道如何从父组件更改它:(

class Popup extends React.Component {
  constructor(props) {
        super(props);

        this.state = {
          submitWrapper: '0px',
          submitDetails: '0px',
          submitButton: 'none',
          opacity: '0'
        }
  }

  render() {
    return(
      <div id="submit-message"
           style={{height: `${this.state.submitWrapper}`}}>
          <h1 style={{opacity: `${this.state.opacity}`}}> GOOD JOB </h1>
          <hr style={{opacity: `${this.state.opacity}`}} />
            <div className="submit-details"
                 style={{height: `${this.state.submitDetails}`}}>
            </div>
            <button style={{display: `${this.state.submitButton}`}}
                    onClick={this.state.submitWrapper = '0px'}> Finished </button>
      </div>
    )
  }
}
export default Popup;

我觉得我在这里错过了一些令人难以置信的简单的东西。

最佳答案

虽然具有基于组件的架构,但很明显您的样式与组件本身位于同一位置。

因此,与其从父级传递样式,不如使用任何 css-in-js 库更好地管理样式,然后有条件地应用 className。

因此,对于您的 PopUp,您将有一个 open 属性并从 Parent 进行设置。然后,Popup 可以根据 prop 应用它自己的样式。

父级

render(){
  return(){
     <PopUp open={this.state.open}/>
  }
}

弹出窗口

render(){
  return(){
    <div className={this.props.open ? 'popUpShow': 'popUpHide' }>
    </div>
  }
}

或者(使用 css-in-js lib )

render(){
  return(){
    <div className={this.props.open ? classes.popUpShow': classes.popUpHide }>
    </div>
  }
}

希望这有帮助! 😇

关于javascript - 更改子组件的状态(CSS 属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49704229/

相关文章:

javascript - 在 Axios 调用后设置状态后无法让 React 组件更新

ios - 虽然项目正在保存在核心数据中,但在重新启动之前无法查看它们

javascript - jquery 空闲秒数计数器

javascript - 选中列表复选框中的至少 1 个复选框时显示按钮

html - 如何根据规范使背景图像响应

elasticsearch - 使用父子关系重新索引 Elasticsearch 索引

javascript - 检查元素显示子 div

javascript - 模态窗口 yii2 中的 Ajax 验证数据

javascript - 上传前的文件大小和 mime 类型

javascript - react ,无法将 Prop 传递到下一个级别