列表渲染
使用 Javascript 中的 map() 方法遍历数组,将数组中每个元素变成 <li> 标签,最后将得到的数组赋值给 list。
const numbers = [1, 2, 3, 4, 5];const list = numbers.map((number) => <li key={number.toString()}>{number}</li>);
需要为每个列表元素分配一个 key 属性以免出现警告。
然后将整个 list 插入到 <ul> 标签中,渲染 DOM。
ReactDOM.render(<ul>{list}</ul>,document.getElementById('root'));
Key
Key 相当于数组中每个元素的标识符,帮助 React 对元素识别。元素的 key 最好是这个元素在列表中独一无二的字符串,例如 id。也可以使用元素索引 index 作为 key:
const todoItems = todos.map((todo, index) =><li key={index}>{todo.text}</li>);
不建议使用索引作为 key 值,因为当列表项目的顺序变化时,会导致性能变差,还可能引起组件状态的问题。
表单
受控组件
渲染表单的 React 组件控制着用户输入过程中表单发生的操作,这样的表单输入元素叫做“受控组件”。例如,当我们想在输入一个表单的同时在屏幕上展示相同的内容,可以将表单写为受控组件:
class Form extends React.Component {constructor(props) {super(props);this.state = { value: '' };this.handleChange = this.handleChange.bind(this);this.handleSubmit = this.handleSubmit.bind(this);}handleChange(event) {this.setState({value: event.target.value});}handleSubmit(event) {alert('提交的名字: ' + this.state.value);event.preventDefault();}render() {return (<form onSubmit={this.handleSubmit}><label>名字:<input type="text" value={this.state.value} onChange={this.handleChange} /></label><input type="submit" value="提交" /></form>);}}
将表单元素的
value属性设置为this.state.value,使得 React 的 state 成为其唯一数据源。而事件处理方法handlechange在每次按键时都会执行并更新 React 的 state,因此this.state.value的值将随着用户输入而更新。
处理多个输入
当组件中包含多个表单元素时,我们可以给每个元素添加与组件 state 同名的 name 属性,并让处理函数根据 event.target.name 的值选择要执行的操作。事件处理方法 handleChange 改写为如下形式:
handleChange(event) {const name = event.target.nameconst value = event.target.valuethis.setState({[name]: value});}
