子组件在父组件循环调用,子组件的数据是固定的,想做优化,这样做对吗?
问题1 子组件是个select ,数据都是从api获取,每次都是固定的内容。父组件中的列表需要大量调用这个子组件,每次这个组件都需要调用api获取数据,每次数据都是一样,这个地方是不是需要优化?
问题2 如果需要优化的话,从react官网找了一下,简单做了更改,理论上每次excuteCallBack 是同一个引用,但是debug的时候 useEffect每次被调用没法证明excuteCallBack 是不是同一个引用呢?
理解不足,希望解答一下。
import React, { useCallback, useEffect, useState } from "react";
import { Team, User } from "@/type/user";
import { Select } from "antd";
import { getTeams } from "@/api";
const { Option } = Select;
interface Props {
record: User;
}
const CusSelect: React.FC<Props> = ({ record }) => {
const [teams, setTeams] = useState<Array<Team>>();
const excuteCallBack = useCallback(
() => {
return getTeams()
},
[]
)
useEffect(() => {
console.log('excuteCallBack reference:',new Date(), excuteCallBack);
async function excute() {
try {
let rest = await excuteCallBack();
//debugger
setTeams(rest.data);
} catch (error) {
console.log(error);
}
}
excute();
}, [excuteCallBack]);
return (
<Select
className="w-4/5"
defaultValue={record.team_name}
disabled={record.role_name != "コーチ"}
onChange={(value) => {
alert(JSON.stringify(record) + value);
}}
>
{teams?.map((item) => (
<Option value={item.team_id} key={item.team_id}>
{item.team_name}
</Option>
))}
</Select>
);
};
export default CusSelect;
回复
1个回答

test
2024-06-20
先说问题1,确实可以优化一下,直接不发起请求,做个 fetch 的 cache 就完事了
第二个问题不太懂,但是我理解你做个节流触发 action,数据统一存在 store 就行
你这种缓存组件的操作应该都不大行。
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容