javascript - 在 ReactJS 中将 Prop 从一个组件传递到另一个组件返回未定义

标签 javascript reactjs components

我是 React 的新手,我正在尝试将 props 从一个 React 组件传递到另一个组件。请考虑下面的代码并告诉我我可能做错了什么。 您会注意到,我正在尝试使用 this.props.value 这样做,但我在控制台中得到的只是“未定义”。我设法通过将所有 HTML 元素放在一个组件中来运行代码,它运行得非常好。

class Editor extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      input: defaultTxt
    };
    this.inputChanges = this.inputChanges.bind(this);
  }

  inputChanges(e) {
    this.setState({
      input: e.target.value
    });
  }

  render() {
    return (
      <div>
        <div id="editorBar">
          Editor
          <i className="fa fa-expand expand" />
        </div>
        <textarea
          id="editor"
          style={editorStyle}
          value={this.state.input}
          onChange={this.inputChanges}
          placeholder={defaultTxt}
        />
      </div>
    );
  }
}

//preview

class Previewer extends React.Component {
  render() {
    return (
      <div>
        <div id="previewerBar">
          Preview
          <i className="fa fa-expand expand" />
        </div>
        <div
          id="preview"
          style={viewerStyle}
          dangerouslySetInnerHTML={{ __html: this.props.value }}
        />
      </div>
    );
  }
}

//wrapper

class Wrapper extends React.Component {
  render() {
    return (
      <div id="wrapper">
        <Editor />
        <Previewer />
      </div>
    );
  }
}

const defaultTxt = `Some default text`;

ReactDOM.render(<Wrapper />, document.getElementById('root'));

最佳答案

它应该是这样的:

class Editor extends React.Component {
  render() {
    return (
      <div>
        <div id="editorBar">
          Editor
          <i className="fa fa-expand expand" />
        </div>
        <textarea
          id="editor"
          style={editorStyle}
          value={this.props.input}
          onChange={this.props.inputChanges}
          placeholder={defaultTxt}
        />
      </div>
    );
  }
}

//preview

class Previewer extends React.Component {
  render() {
    return (
      <div>
        <div id="previewerBar">
          Preview
          <i className="fa fa-expand expand" />
        </div>
        <div
          id="preview"
          style={viewerStyle}
          dangerouslySetInnerHTML={{ __html: this.props.value }}
        />
      </div>
    );
  }
}

//wrapper

class Wrapper extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      input: defaultTxt
    };
    this.inputChanges = this.inputChanges.bind(this);
  }

  inputChanges(e) {
    this.setState({
      input: e.target.value
    });
  }

  render() {
    return (
      <div id="wrapper">
        <Editor input={this.state.input} inputChanges={this.inputChanges}/>
        <Previewer value={this.state.input}/>
      </div>
    );
  }
}

const defaultTxt = `Some default text`;

ReactDOM.render(<Wrapper />, document.getElementById('root'));

想法是 Wrapper 组件 将成为保存状态和控制状态变化的组件。 Editor 和 Previewer 是它的子项,它们接收数据以显示和调用回调 prop。

关于javascript - 在 ReactJS 中将 Prop 从一个组件传递到另一个组件返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52777681/

相关文章:

javascript - 将 React 应用程序部署到生产环境返回 "You need to enable JavaScript to run this app"

reactjs - 使用样式组件向子元素添加样式?

forms - 我应该使用 laravel collective 还是其他组件?

javascript - 我无法弄清楚我在 getDay() 上做错了什么

javascript - 403 Forbidden on site resources (js,png,css) 但权限可以吗?

javascript - 即使底部不在 View 中,也使水平滚动条始终可见

javascript - 本地package.json存在,但缺少node_modules

java - Swing 的 BoxModel 是如何工作的?

delphi - 创建表单时不会调用 TPicture 属性的 Set 方法

javascript - 如何在div外单击鼠标时隐藏div