简体   繁体   English

如何将 Class 组件转换为 React 中的功能组件?

[英]How to Convert Class components to functional components in React?

import React, { PureComponent, Fragment } from 'react';

class Practice extends PureComponent {

  state = {

    options: [
      {
        name: 'Select…',
        value: null,
      },
      {
        name: 'Rui',
        value: 3000,
      },
      {
        name: 'Catla',
        value: 3000,
      },
      {
        name: 'Carpio',
        value: 3000,
      },
      {
        name: 'Tilapia',
        value: 1750,
      },
      {
        name: 'Mrigel',
        value: 3000,
      },
      {
        name: 'Pabda',
        value: 3500,
      },
      {
        name: 'Koi',
        value: 750,
      },
    ],
    value: '?',
  };

  handleChange = (e) => {

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

  render() {
    const { options, value } = this.state;

    return (
      <Fragment>
        <select onChange={this.handleChange} value={value}>
          {options.map(item => (
            <option key={item.value} value={item.value}>
              {item.name}
            </option>
          ))}
        </select>
        <p>Oxygen Demand: {value}</p>
      </Fragment>
    );
  }
}

export default Practice;

Use useState to handle state of options and value Use useCallback to handle change events on select field Return your rendered JSX使用useState处理optionsvalue的 state 使用useCallback处理 select 字段上的更改事件返回您呈现的 JSX

import React, { useState } from "react";

function Practice() {
  const [options, setOptions] = useState([
    {
      name: "Select…",
      value: null,
    },
    {
      name: "Rui",
      value: 3000,
    },
    {
      name: "Catla",
      value: 3000,
    },
    {
      name: "Carpio",
      value: 3000,
    },
    {
      name: "Tilapia",
      value: 1750,
    },
    {
      name: "Mrigel",
      value: 3000,
    },
    {
      name: "Pabda",
      value: 3500,
    },
    {
      name: "Koi",
      value: 750,
    },
  ]);
  const [value, setValue] = useState("?");

  const handleChange = useCallback((e) => {
    setValue(e.target.value);
  }, []);

  return (
    <>
      <select onChange={handleChange} value={value}>
        {options.map((item) => (
          <option key={item.value} value={item.value}>
            {item.name}
          </option>
        ))}
      </select>
      <p>Oxygen Demand: {value}</p>
    </>
  );
}

export default Practice;

Convert like this:像这样转换:

import React, { useState, PureComponent, Fragment } from 'react';

let Practice = (praps) =>
let [options,soptions] = useState([
  {
    name: 'Select…',
    value: null,
  },
  {
    name: 'Rui',
    value: 3000,
  },
  {
    name: 'Catla',
    value: 3000,
  },
  {
    name: 'Carpio',
    value: 3000,
  },
  {
    name: 'Tilapia',
    value: 1750,
  },
  {
    name: 'Mrigel',
    value: 3000,
  },
  {
    name: 'Pabda',
    value: 3500,
  },
  {
    name: 'Koi',
    value: 750,
  },
]);
let [value,svalue]=useState('?')

let handleChange = (e) => {

svalue(e.target.value);

};

render() {

return (
  <Fragment>
    <select onChange={this.handleChange} value={value}>
      {options.map(item => (
        <option key={item.value} value={item.value}>
          {item.name}
        </option>
      ))}
    </select>
    <p>Oxygen Demand: {value}</p>
  </Fragment>
);

} }

export default Practice;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM