如何动态添加元素属性

时间:2019-01-31 03:30:15

标签: javascript reactjs react-native

我正在reactjs应用和我卡住上动态地添加的属性。

我有电子邮件输入字段和一个提交按钮,当单击一个提交按钮时,如果电子邮件无效,我想添加错误消息。到目前为止,这是我所做的...

<TextField label='Email'/>
<Button onPress()=>this.doSomethingFunction() />

欲doSomethingfunction()动态地添加错误属性,如下

 <TextField label='Email' error="invalid entry"/>

我面临的问题是,如果我离开error属性,如上所示,即使用户输入电子邮件地址,该错误消息也会出现。我正在考虑的解决方案是在发现属性无效后添加属性,但是我不动态地进行操作。

4 个答案:

答案 0 :(得分:2)

您可以使用状态变量来更新UI。因此请尝试执行以下操作:

constructor(props) {
  super(props);
  this.state = {
    validStatus: 0 // initial state, 1: valid state, 2: invalid state
  } 
}

doSomethingFunction = () => {
  ...
  if (email is valid) {
    this.setState({ validStatus: 1 });
  } else {
    this.setState({ validStatus: 2 });
  }
  ...
}

render() {
  const { validStatus } = this.state;
  return (
    <View>
      ...
      {validStatus !== 2 && <TextField label='Email'/>
        <Button onPress()=>this.doSomethingFunction() />}
      {validStatus === 2 && <TextField label='Email' error="invalid entry"/>}
      ...
    </View
  );
}

答案 1 :(得分:2)

仅使用状态。您可以将 TextField 错误属性设置为接收 emailError 状态。因此,当您点击按钮时, emailError 值将被更改。

class MyComponent extends React.Component {
  state = {
    emailError: ''
  }

  validate = () => {
    this.setState({emailError: 'invalid entry'})
  }

  render () {
    return (
      <View>
        <TextField label='Email' error={this.state.emailError} />
        <Button onPress={this.validate}/>
      </View>
    )
  }
}

答案 2 :(得分:1)

这可以使用组件的状态并基于状态进行一些条件渲染来完成。这是一个粗略的伪代码,它显示了如何使用状态进行条件渲染

class MyComponent extends React.Component {

  constructor() {
    super();
    this.state = {isError: false}
  }

  validate() {
    if (inputIsInvalid) {
      this.setState({isError: false})
    }
  }

  render() {
    let textField = <TextField label='Email'/>;
    if(this.state.isError)
      textField = <TextField label='Email' error="invalid entry"/>;
    return (
      {textField}
      <Button onPress()=>this.validate() />
    );
  }

}

答案 3 :(得分:0)

我从没使用过react,所以我可能还差得远,但是this documentation表示error是一个布尔值-因此,如果将其全部设置,它可能会被解释为“真正”。

您可以使用myElement.setAttribute("myAttribute", "myValue")更改标准HTML元素上的属性。如果此方法适用于react组件(不会混淆react),那么您可以仅在要设置为true时设置error属性,否则将其删除。 (如果react不希望您这样做,那么希望以上链接可以使您走上正确的轨道。)