React JS. 将元素附加到DOM

7

我是React的新手,最近几天一直在尝试使用它。我正在尝试将一个值添加到DOM中,我找到了一种方法,但我正在寻找一种更好的方法来实现。

var para = document.createElement("li");
var t = document.createTextNode(value);
para.appendChild(t);
document.getElementById("root").appendChild(para); 

但是,我正在寻找一种不同的方式。我尝试了几种不同的方式,但是我卡住了。除了上面提到的方式,还有其他方法吗?

import React, { Component } from 'react';
import { render } from 'react-dom';


export class Parent extends React.Component {
  constructor(props) {
    this.greet = this.greet.bind(this);
    this.state = { text: " " };
  }

  greet(value) {
    //console.log(value);

    var para = document.createElement("li");
    var t = document.createTextNode(value);
    para.appendChild(t);
    document.getElementById("root").appendChild(para); 

  }

  render() {
    return (
      <div>
        <Child onGreet={this.greet} />
      </div>
    )
  }
};


export class Child extends React.Component {

  constructor(props) {
    this.state = { value: '' };
    this.handleChange = this.handleChange.bind(this);
    this.eventClick = this.eventClick.bind(this);
  }

  handleChange(event) {
    this.setState({ value: event.target.value });
  }

  eventClick() {
    this.props.onGreet(this.state.value);
  }

  render() {
    return (
      <div>
<input type="text" value={this.state.value} onChange={this.handleChange} />
<button type="button" onClick={this.eventClick}>Submit </button>
      </div>
    )
  }
};

1
请不要编辑您的问题以询问完全不同的概念,请提出一个新的问题。 - ecraig12345
1
我也建议您查看这个教程,以便了解为什么justelouise的答案有效,并更好地了解React中的常规操作。https://reactjs.org/tutorial/tutorial.html - ecraig12345
抱歉,我已经改回去了。感谢您提供的链接。 - firmfiasco
1个回答

7
你可以尝试使用React的state属性。
import React, { Component } from 'react';
import { render } from 'react-dom';

export class Parent extends React.Component {
  constructor(props) {
    this.greet = this.greet.bind(this);
    this.state = {
      text: [],
    };
  }

  greet(value) {
    //console.log(value);

    const {text} = this.state
    return this.setState({
      text: text.concat(value),
    });

  }

  render() {
    return (
      <div>
        <Child onGreet={this.greet} />
        <ul>
        {this.state.text.map(x => (<li>{x}</li>))}
        </ul>
      </div>
    )
  }
};

随着this.state.text的值发生变化,列表就会被填充。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接