【问题标题】:React and accepted standards反应和公认的标准
【发布时间】:2019-12-19 07:49:33
【问题描述】:

也许不是问这个问题的最佳地点。如果没有,请指出我需要走的路。

我已经开始使用 ReactJS 来更新编程语言,我相信我掌握了基本概念;然而,在学习一门新的编程语言时,我发现了许多不同的做事方式(例如计算机编程的案例)。我想在我的设计中使用一个简单的输入组件:

class TextField extends Component{
  constructor(props,context){
    super(props,context);
    this.state = {errmsg: ''}
    this.setError = this.setError.bind(this);
  }
  setError(errormessage){
    this.setState({
      errmsg: errormessage
    })
  }
  render(){
    var inpdiv = this.props.id + "_div";
    var errdiv = this.props.id + "_err";
    return(
      <div id={inpdiv}>
        <label for={this.props.id}>{this.props.label}
          <input type="text" id={this.props.id} name={this.props.id} />
          <div id={errdiv}>{this.state.errmsg}</div>
        </label>
      </div>
    )
  }
}
export default TextFieldest;

注意 setError 函数。我从另一个(父)组件调用此函数:

class Form extends Component{
  constructor(props,context){
    super(props,context)
    this.emailaddress_ref = React.createRef();
    this.handleSubmit = this.handleSubmit.bind(this);
  }
  handleSubmit(){
    this.emailaddress_ref.current.setError('Testing the Error Area of the Test Component');
  }
  render(){
    return(
      <div>
        <Test id="emailaddress" ref={this.emailaddress_ref} label="Enter Email Address" />
        <Button btntext="Press Me!" handleclick={this.handleSubmit} />
      </div>
    )
  }
}
export default Form;

我的问题是: 这是处理更改子组件状态的最被接受的方法,还是我在这里走错了路?

【问题讨论】:

    标签: reactjs components


    【解决方案1】:

    您可能更希望通过 props 传递错误函数,因为它将一个组件与另一个组件解耦,并且它不会导致如果您渲染两个或更多组件,您将在处理 refs 的场景中遇到混乱真的不需要它们。 refs 在他们的需求中很少见,虽然你可以按照自己的方式弯曲它们,但通过 props 发送东西要明智得多。一般来说,为可重用组件使用 id 也不是一个好主意。

    您需要了解您的情况,例如谁应该处理错误以及处理错误的程度。关于输入验证,您的文本输入是半自主的吗?如果您在其他地方重用,您会相信它的验证应该由父母处理吗?是和否都是有效的答案,但您需要了解谁拥有您应用中的流程。

    【讨论】:

    • 亚伯拉罕,您的回答很受赞赏,而且非常有意义;但是,我还没有找到将道具传递给子函数以触发状态更改的方法。你能给我指个教程吗?
    • 基本上状态应该只根据组件本身包含的行为的优点进行更改。有一个道具(容易被设计改变)来改变状态将导致可能的循环引用和多次重新渲染。如果确实需要,您可以在返回之前在 render 方法上执行它。但这并不是真正可取的。
    • 在您的示例中进一步详细说明,如果您的文本输入组件具有自我验证行为,它应该在一个例如焦点输出事件中触发,该事件将运行验证,如果它通过,它将发送向上更改状态的消息,否则会将其状态更改为无效并且不发送任何内容..
    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-02-22
    • 1970-01-01
    相关资源
    最近更新 更多