以编程方式向元素添加属性

时间:2019-10-24 12:39:24

标签: javascript reactjs material-ui

好的,所以我的问题是如何以编程方式向组件添加道具,这是我的情况,例如,我在render()中有这个道具:

              <TextField
                name="password"
                variant="outlined"
                label="Password"
                type="password"
                className={classNames(styles.signUpInputField, styles.override)}
                onChange={this.handleChange}
                onBlur={this.validate}
              ></TextField>

您可以看到它进入了一个validate函数,这是一个冗长的函数,因此,我仅举一个示例,而不是我的实际validate函数:

  validateEmail = event => {
    if (event.target.name !== "email") {
         ///Set HelperText and error props here
    } 
  };

我想发生的是在<TextField>上修改道具,即设置error= truehelperText= "some error here",我该如何在函数中做到这一点?

编辑:我需要避免使用状态,因为有多个字段需要专门分配,并且每个状态都不能使用imo。

4 个答案:

答案 0 :(得分:4)

您必须使用state而不是props添加。

class YourComponent extends React.Component {
 constructor(){
  state = {
   error: false,
   helperText: '',
 }
}

validateEmail = event => {
    if (event.target.name !== "email") {
         ///Set HelperText and error state here
         this.setState({error: true, helperText: "some error here"})
    }
  };

render (
   ...

   <TextField
      name="password" 
      variant="outlined"
      label="Password"
      type="password"
      className={classNames(styles.signUpInputField, styles.override)}
      onChange={this.handleChange}
      onBlur={this.validate}
      error={this.state.error} // add this new line
   />
   <span>{this.state.helperText}</span>

   ....
);
}

答案 1 :(得分:3)

您必须在组件中添加状态。

对于多个输入,我实现了这一点 this

class MyComponent extends React.Component {
state = {
   error: false,
   helperText: '',
}

validateEmail = event => {
    if (event.target.name !== "email") {
         ///Set HelperText and error props here
         this.setState({error: true, helperText: "some error here"})
    } 
  };

render (
   <TextField
      name="password" 
      variant="outlined"
      label="Password"
      type="password"
      className={classNames(styles.signUpInputField, styles.override)}
      onChange={this.handleChange}
      onBlur={this.validate}
      error={this.state.error}
   />
   {this.state.helperText}
);
}

答案 2 :(得分:0)

要以编程方式添加属性,可以使用JSX扩展语法{...props}

class MyComponent extends React.Component {
state = {
   error: false,
   helperText: '',
   additionalProps: {}
}

validateEmail = event => {
    if (event.target.name !== "email") {
         ///Set HelperText and error props here
         this.setState({
         additionalProps: {error: true, helperText: "some error here"}
         })
    } 
  };

render (
   <TextField
      {...this.state.additionalProps}
      name="password" 
      variant="outlined"
      label="Password"
      type="password"
      className={classNames(styles.signUpInputField, styles.override)}
      onChange={this.handleChange}
      onBlur={this.validate}
      error={this.state.error}
   />
   {this.state.helperText}
);
}

答案 3 :(得分:-1)

您只能在一种状态下执行此操作。只需使用onChange()方法即可根据字段更改状态。如果假定错误在电子邮件字段上弹出,请在电子邮件字段的onChange()方法中检查错误,如果发生错误,请相应地更改状态(错误和帮助文本)。并在更新状态后更新将显示错误的字段。