React 有状态组件改造为无状态组件

        什么时候使用无状态组件?当我们定一个UI组件的时候,它只负责页面渲染,没有做任何逻辑操作,内部因此只有一个render函数的时候,我们可以通过无状态组件来替换掉有状态组件。

        无状态组件的优势——性能高,就是一个函数;而有状态组件是js里面的类,类生成的对象中还有生命周期函数,所以既要执行其余的生命周期函数又要执行render,它执行的东西远比无状态组件执行的多得多。一个有状态组件的性能是赶不上一个无状态组件的。

//父组件的模版部分
class TodoList extends Component {
    render() {
        return (
            <TodoListUI
                inpuValue={this.state.inpuValue}
                handleInputChange={this.handleInputChange}
                handleButtonSubmit={this.handleButtonSubmit}
                list={this.state.list}
                handleItemDelete={this.handleItemDelete} />
        )
    }
}
export default TodoList;
//***TodoListUI.js为有状态组件时

import React, { Component } from 'react';
import 'antd/dist/antd.css';
import { Input, Button, List } from 'antd';

export default class TodoListUI extends Component {
  render() {
    return (
      <div style={{ marginTop: "10px", marginLeft: "10px" }}>
        <div>
          <Input
            value={this.props.inputValue}
            placeholder="todo info"
            style={{ width: "300px", marginRight: "10px" }}
            onChange={this.props.handleInputChange}></Input>
          <Button type="primary" onClick={this.props.handleButtonSubmit}>提交</Button>
        </div>
        <List
          style={{ marginTop: "10px", width: "370px" }}
          bordered
          dataSource={this.props.list}
          renderItem={(item, index) =>
            <List.Item
              onClick={() => { this.props.handleItemDelete(index) }}>
              {item}
            </List.Item>
          }
        />
      </div>
      //***如果想调用父组件的方法,也想传index过去,就是以上写法,箭头函数每次执行的好时候都能获取到index的值,onClick的时候index就可以被获取到
    )
  }
}

//***TodoListUI.js为无状态组件时

import React from 'react';
import 'antd/dist/antd.css';
import { Input, Button, List } from 'antd';

const TodoList = (props) => {
  return (
    <div style={{ marginTop: "10px", marginLeft: "10px" }}>
      <div>
        <Input
          value={props.inputValue}
          placeholder="todo info"
          style={{ width: "300px", marginRight: "10px" }}
          onChange={props.handleInputChange}></Input>
        <Button type="primary" onClick={props.handleButtonSubmit}>提交</Button>
      </div>
      <List
        style={{ marginTop: "10px", width: "370px" }}
        bordered
        dataSource={props.list}
        renderItem={(item, index) =>
          <List.Item
            onClick={() => { props.handleItemDelete(index) }}>
            {item}
          </List.Item>
        }
      />
    </div>
  )
}
export default TodoList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值