我已经使用了React几个星期但是我有这个简单的问题,我似乎无法解决这个问题.这是关于创建新的html元素. 我想知道一般来说,我采用的方式是“正确的方式”,还是有另一种使用点击功能
我想知道一般来说,我采用的方式是“正确的方式”,还是有另一种使用点击功能创建新的html元素的首选方法.
出于某种原因,这个问题花了一段时间让我弄明白,它仍然感觉有点奇怪,这就是我要问的原因.
提前致谢!
import React, { Component } from 'react'; import './Overview.css'; import Project from './Project'; class Overview extends Component { constructor() { super() this.state = { itemArray: [] } } createProject() { const item = this.state.itemArray; item.push( <div> <h2>Title</h2> <p>text</p> </div> ) this.setState({itemArray: item}) //console.log(this.state) } render() { return ( <div className="Overview"> <p>Overview</p> <button onClick={this.createProject.bind(this)}>New Project</button> <Project /> <div> {this.state.itemArray.map((item, index) => { return <div className="box" key={index}>{item}</div> })} </div> </div> ); } } export default Overview;不,这不是一个正确的方法.你不应该生成像这样的HTML元素,也不应该让它们处于状态 – 这样就反对React来操纵DOM.您将无法利用Virtual DOM是我能想到的第一件事.
你应该做的是保留状态渲染所需的所有数据,然后从那里生成HTML元素
createProject() { const item = this.state.itemArray; const title = ''; const text = ''; item.push({ title, text }) this.setState({itemArray: item}) } render() { return ( <div className="Overview"> <p>Overview</p> <button onClick={this.createProject.bind(this)}>New Project</button> <Project /> <div> {this.state.itemArray.map((item, index) => { return ( <div className="box" key={index}> <div> <h2>{item.title}</h2> <p>{item.text}</p> </div> </div> ) })} </div> </div> ); }