【问题标题】:Warning: Functions are not valid as a React child. ReactJS警告:函数作为 React 子级无效。反应JS
【发布时间】:2020-03-09 10:00:10
【问题描述】:

我的“Board”课程有问题。我一直在到处寻找解决方案,但似乎无法解决。请告诉我我做错了什么。

错误消息是:警告:函数作为 React 子级无效。如果您返回一个组件而不是从渲染中返回,则可能会发生这种情况。或者你可能是想调用这个函数而不是返回它

class Test extends Component {
  state = {
    editing: false
  };

  edit = () => {
    this.setState({ editing: true });
  };

  remove() {
    alert("removing");
  }
  save = () => {
    var val = this.refs.editedtext.value;
    console.log(val);
    this.setState({ editing: false });
  };

  RenderNormal = () => {
    return (
      <div className="commentContainer">
        <div className="commentText" style={{ fontSize: "100px" }}>
          {this.props.children}
        </div>
        <button onClick={this.edit} className="btn btn-primary">
          Edit
        </button>
        <button onClick={this.remove} className="btn btn-danger">
          Delete
        </button>
      </div>
    );
  };
  RenderForm = () => {
    return (
      <div className="commentContainer">
        <textarea
          ref="editedtext"
          defaultValue={this.props.children}
        ></textarea>
        <button onClick={this.save} className="btn btn-danger">
          Save
        </button>
      </div>
    );
  };
  render() {
    if (this.state.editing) {
      return this.RenderForm;
    } else return this.RenderNormal;
  }
}

**class Board extends Component {
  state = {
    comments: ["Comment1", "Comment2", "Comment3"]
  };
  render = () => {
    return (
      <div>
        {
          (this.state.comments.map = (text, i) => {
            return <Test key={i}>{text}</Test>;
          })
        }
      </div>
    );
  };
}**

export { Test, Board };
Index.JS:
ReactDOM.render(
  <div>
    <Board />
  </div>,
  document.getElementById("app")
);

【问题讨论】:

  • (this.state.comments.map = (text, i) =&gt; { 删除=(this.state.comments.map(text, i) =&gt; {
  • @NicholasTower 它现在给了我这个错误 ./src/App.js Line 70:47: Parsing error: Unexpected token, expected ","
  • 我忽略了括号是错误的。 this.state.comments.map((text, i) =&gt; {
  • 非常感谢@NicholasTower,您的解决方案与 Ian 一起解决了我的问题。

标签: javascript html node.js reactjs


【解决方案1】:
  render() {
    if (this.state.editing) {
      return this.RenderForm;
    } else return this.RenderNormal;
  }

在您的render 函数中,您返回的是两个函数 之一,而不是调用它们的结果。如果您只是在RenderFormRenderNormal 的末尾添加括号(即return this.RenderForm();,它应该可以正常工作,因为您将返回调用该函数的结果。

【讨论】:

  • 我这样做了,但并没有真正改变任何东西。在没有括号的情况下,我在渲染第一堂课时从来没有遇到任何问题,只有第二堂课的映射有问题
  • 等一下,您修复了导致此问题的两个错误之一。非常感谢!
猜你喜欢
  • 2020-11-18
  • 2018-12-15
  • 2018-11-05
  • 2019-06-16
  • 2021-01-03
  • 2018-10-16
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多