javascript - destructured prop 中的 className 有时不适用于组件,这是一个错误吗?(下一个.JS)
问题描述
我有一个这样的组件:
import classNames from "classnames";
const Button = (props) => {
const { className, children, ...rest } = props;
const [internalProps, setInternalProps] = useState(rest);
const [classes, setClasses] = useState("");
const validateProps = () => {
const tmp: Props = Object.assign(rest, {});
const classes = [
"btn",
className,
{ "btn-block": block },
{ "btn-sm": size === "sm" },
{ "btn-lg": size === "lg" },
];
setClasses(classNames(classes));
setInternalProps(tmp);
};
useEffect(validateProps, [props]);
return (
<button className={classes} {...internalProps}>
{children}
</button>
);
};
该className
道具被取出,internalProps
因为无论出于何种原因,当包含在其中时,有时在加载页面时不会应用这些类。我不知道为什么会这样,AFAIKclassName
被视为 React 中的另一个道具。不过,我对 React 和 Next.JS 还是很陌生,所以我可能在这里遗漏了一些基本的东西。有没有人经历过这样的事情?
解决方案
您设置internalProps
为与 相同rest
,并且rest
不包括className
。
这一行:
const { className, children, ...rest } = props
意思是:
从props
取className
and children
,并将所有剩余的属性(不包括className
and children
)放入rest
.
推荐阅读
- android-studio - 无法运行 libGDX 示例项目
- visual-studio-code - 所有的俄语字母都变成“??????” 在 Visual Studio 代码中
- python - 如何使用多行字符串参数处理嵌套函数调用的重新格式化
- r - 如何在 R 中设置环境变量以使用 conda 环境
- echarts - 使用 (x,y) 坐标创建折线图
- r - 运行循环以改变样本数量
- node.js - 等待 ssh-exec 完成
- php - Laravel 配置文件的 apache2 域名和目录根位置是什么?
- powershell - 在数组中查找字符串 Powershell V2.0
- c# - WPF C# WebView在win 10上不显示任何页面