
规则:component-hook-factories
ReactAPI 参考:ESLint 插件
component-hook-factories
验证高阶函数定义嵌套组件或 hooks 的行为。组件和 hooks 应在模块级别定义。
规则详情 {/rule-details/}
在其他函数内部定义组件或 hooks 会在每次调用时创建新实例。React 将每个实例都视为完全不同的组件,从而销毁并重新创建整个组件树、丢失所有状态,并导致性能问题。
无效用法 {/invalid/}
以下是本规则的错误代码示例:
-
js
// ❌ Factory function creating components
function createComponent(defaultValue) {
return function Component() {
// ...
};
}
// ❌ Component defined inside component
function Parent() {
function Child() {
// ...
}
return <Child />;
}
// ❌ Hook factory function
function createCustomHook(endpoint) {
return function useData() {
// ...
};
}
有效用法 {/valid/}
以下是本规则的正确代码示例:
js
// ✅ Component defined at module level
function Component({ defaultValue }) {
// ...
}
// ✅ Custom hook at module level
function useData(endpoint) {
// ...
}
故障排除 {/troubleshooting/}
我需要动态组件行为 {/dynamic-behavior/}
你可能认为需要工厂函数来创建定制化组件:
js
// ❌ Wrong: Factory pattern
function makeButton(color) {
return function Button({children}) {
return (
<button style={{backgroundColor: color}}>
{children}
</button>
);
};
}
const RedButton = makeButton('red');
const BlueButton = makeButton('blue');
js
// ✅ Better: Pass JSX as children
function Button({color, children}) {
return (
<button style={{backgroundColor: color}}>
{children}
</button>
);
}
function App() {
return (
<>
<Button color="red">Red</Button>
<Button color="blue">Blue</Button>
</>
);
}
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
