javascript - 重新渲染时 react 容器未被移除

标签 javascript reactjs

我有一个表单,如果状态中添加了任何错误,则会显示错误容器。有一个 handleSubmit 函数在发送 ajax 请求之前调用 validateForm 函数。

getInitialState: function () {
  return {
    formErrors: []
  };
},

render: function () {
  var errors = this.state.formErrors.map(function(error) {
    return (
      <li>
        {error}
      </li>
    );
  });

  var errorContainer = (
    <ul>
      {errors}
    </ul>
  );

render函数的返回 block 中,有这一行用于显示错误容器:

{ this.state.formErrors.length == 0 ? '' : errorContainer }

validateForm函数内部,我有这样的东西:

this.setState({ formErrors: [] });
var name = this.refs.name.getDOMNode().value.trim();

if (!name) {
  newErrors = this.state.formErrors;
  newErrors.push('Please add a name');
  this.setState({
    formErrors: newErrors
  });
}

这是有效的,因为它将错误添加到状态中的 formErrors 键中,但是如果我输入正确的内容,任何"new"错误都将在 View 中附加到 li 而不是绘制一个包含 N-1 个错误的新错误容器,在这种情况下我会填写名称字段。

这是一个jsfiddle:http://jsfiddle.net/ke4bmqny/7/

最佳答案

您的父表单组件控制错误状态,当您将其传递给错误显示子组件时,错误是该组件的 Prop 。请参阅Communicate Between Components .

将此行更改为驼峰式大小写:P

<GroupFormErrorComponent formErrors={this.state.formErrors} />

你的说法几乎是正确的,但你的错误显示组件没有也不应该需要将错误复制到另一个状态变量中。

var GroupFormErrorComponent = React.createClass({

    render: function () {
      var errors = this.props.formErrors.map(function(error, index) {
        return (
          <li key={index}>
            {error}
          </li>
        );
      });

      var errorContainer = (
        <div>
          <div>
            Sorry but there are errors:
          </div>
          {errors}
        </div>
      );

      return (
        <div>
          { this.props.formErrors.length == 0 ? '' : errorContainer }
        </div>
      );
    }
});

PS 只是关于您添加到 js fiddle 的 DOMReady 内容的一点提示 - 您不需要它,只需将 <script> html 下面的部分(在 <div id='form'></div> 之下),它将准备就绪。

更新的 fiddle :http://jsfiddle.net/dL0uj9oc/3/

关于javascript - 重新渲染时 react 容器未被移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31021973/

相关文章:

javascript - 单击功能在我的 Web 应用程序中不起作用

javascript - onsubmit 返回 false 无效

javascript - 组件中的输入未正确更新

javascript - React-router子域路由

javascript - 单击网格中的任何图像时如何运行函数?

javascript - 更改 HighCharts 背景颜色?

javascript - Phaser框架: Assigning (and deleting) a sprite to each of the element in an array

reactjs - webpackJsonp 未定义

javascript - 获取 TypeError : this. props.users.items 在 ReactJs 上未定义

reactjs - 组件正在更改不受控制的自动完成以进行控制