React Styled Component定义位置疑问:是否应放组件外部?最佳位置在哪?
关于Styled Component的放置位置问题
1. “通常Styled Component应定义在组件外部”的说法是否正确?
这个说法是对的,但并非绝对规则。
把Styled Component定义在函数组件内部,会导致每次组件渲染时都重新创建这个Styled组件实例——虽然styled-components内部有缓存机制,不会每次都生成新的CSS类,但额外的组件创建逻辑还是会带来不必要的性能开销,同时也违背了组件复用的设计思路。
2. StyledTableCell的最佳放置位置
分两种场景判断:
- 常规场景(样式不依赖组件内部状态/Props):放在当前组件的外部(同一文件内即可),这是最推荐的做法。既避免了重复创建组件的性能问题,也让代码结构更清晰,要是后续同一文件里其他地方需要用这个样式的TableCell,也能直接复用。
修改后的代码示例:import styled from 'styled-components'; import { TableCell, TableRow } from '@mui/material'; const StyledTableCell = styled(TableCell)` && { padding: 1.5px; color: green; background-color: blue; } `; const ProcedureServicesRowHeader = () => { return ( <TableRow> <StyledTableCell textAlign="left">Service</StyledTableCell> <StyledTableCell textAlign="center">Units</StyledTableCell> <StyledTableCell textAlign="right">Charge</StyledTableCell> <StyledTableCell textAlign="right">Total</StyledTableCell> </TableRow> ); }; export default ProcedureServicesRowHeader; - 特殊场景(样式依赖组件内部状态/Props):如果StyledTableCell需要用到组件内部的状态、props或者其他局部变量(比如根据组件的某个状态动态修改背景色),那必须把它放在组件内部。但这种情况尽量通过props传递动态值,而非在内部重新定义整个组件,示例如下:
const ProcedureServicesRowHeader = ({ isHighlighted }) => { const StyledTableCell = styled(TableCell)` && { padding: 1.5px; color: green; background-color: ${isHighlighted ? 'yellow' : 'blue'}; } `; return ( <TableRow> <StyledTableCell textAlign="left">Service</StyledTableCell> <StyledTableCell textAlign="center">Units</StyledTableCell> <StyledTableCell textAlign="right">Charge</StyledTableCell> <StyledTableCell textAlign="right">Total</StyledTableCell> </TableRow> ); };
内容的提问来源于stack exchange,提问作者mattsmith5
相关产品推荐
相关产品推荐

