自学内容网 自学内容网

react 中变量和函数放在函数组件内还是组件外

一、在内部的情况

1. 状态相关变量(使用`useState`或`useReducer`)

变量的变化会导致组件重新渲染,应放在内部。

import { useState } from "react";

const CounterComponent = () => {

  const [count, setCount] = useState(0);



  return (

    <div>

      <p>Count: {count}</p>

      <button onClick={() => setCount(count + 1)}>Increment</button>

    </div>

  );

};

2. 仅在组件内部使用的辅助函数

如数据格式化、事件处理等,应该放在组件内部。

import { useState } from "react";

const FormComponent = () => {

  const [inputValue, setInputValue] = useState("");

  const validateInput = () => {

    return inputValue.length > 0;

  };

  const handleSubmit = () => {

    if (validateInput()) {

      // 提交表单逻辑

    }

  };

  return (

    <form onSubmit={handleSubmit}>

      <input

        type="text"

        value={inputValue}

        onChange={(e) => setInputValue(e.target.value)}

      />

      <button type="submit">Submit</button>

    </form>

  );

};

3. 依赖组件状态或`props`的函数

如果一个函数的执行依赖于组件的状态或者`props`,那么这个函数应该放在组件内部。

import { useState } from "react";

const DataListComponent = () => {

  const [filterText, setFilterText] = useState("");

  const dataList = [

    { name: "John", age: 30 },

    { name: "Jane", age: 25 },

    // 更多数据

  ];

  const filteredData = dataList.filter((item) =>

    item.name.includes(filterText)

  );

  return (

    <div>

      <input

        type="text"

        value={filterText}

        onChange={(e) => setFilterText(e.target.value)}

      />

      <ul>

        {filteredData.map((item) => (

          <li key={item.name}>

            {item.name} - {item.age}

          </li>

        ))}

      </ul>

    </div>

  );

};

二、在外部的情况

1. 全局配置或常量

如果一个变量是全局配置,如 API 端点的 URL、主题颜色等常量,并且不依赖于组件的特定状态或`props`,可以放在组件外部。

const API_URL = "https://api.example.com";

const THEME_COLOR = "red";

const MyComponent = () => {

  // 组件内部可以使用API_URL和THEME_COLOR

  return <div>{/* 组件内容 */}</div>;

};

2. 工具函数(不依赖组件特定状态和`props`)

如果一个函数是通用的工具函数,不依赖于组件的状态或`props`,并且可能在多个组件中使用,应该放在组件外部。

const formatDate = (date) => {

  const options = { year: "numeric", month: "long", day: "numeric" };

  return new Date(date).toLocaleDateString(undefined, options);

};

const MyComponent = () => {

  const someDate = new Date();

  const formattedDate = formatDate(someDate);

  return (

    <div>

      <p>{formattedDate}</p>

    </div>

  );

};

3. 组件外部状态管理

存储全局状态的变量和用于操作这些状态的函数

import { createStore } from "redux";

const counterReducer = (state = 0, action) => {

  switch (action.type) {

    case "INCREMENT":

      return state + 1;

    case "DECREMENT":

      return state - 1;

    default:

      return state;

  }

};

const store = createStore(counterReducer);

const incrementAction = () => {

  return { type: "INCREMENT" };

};

const MyComponent = () => {

  const count = useSelector((state) => state);

  const dispatch = useDispatch();

  const handleIncrement = () => {

    dispatch(incrementAction());

  };

  return (

    <div>

      <p>Count: {count}</p>

      <button onClick={handleIncrement}>Increment</button>

    </div>

  );

};

`store`、`counterReducer`和`incrementAction`放在组件外部,而组件内部通过`useSelector`和`useDispatch`来与外部状态进行交互。


原文地址:https://blog.csdn.net/weixin_64684095/article/details/144148493

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!