reactjs - 使用样式组件设置 react-router-dom 链接在传递道具时收到警告
问题描述
import styled from 'styled-components';
import {Link} from 'react-router-dom';
const LS = {};
LS.NavFixedItem_LINK = styled(Link)`
display: flex;
justify-content: ${props => props.tempLeftProp ? 'flex-start' : 'center'};
align-items: center;
`;
function NavFixedItem(props) {
return(
<LS.NavFixedItem_LINK to={props.link} tempLeftProp={props.toLeft}>
{props.name}
</LS.NavFixedItem_LINK>
);
}
我收到错误:
警告: React 无法识别
tempLeftProp
DOM 元素上的 prop。如果您有意希望它作为自定义属性出现在 DOM 中,请将其拼写为小写字母templeftprop
。如果您不小心从父组件传递了它,请将其从 DOM 元素中移除。
我一直将道具传递给我的样式组件。我不知道问题是否在于我正在设置组件Link
而不是常规 HTML 元素的样式。
问题
为什么我会收到此错误?忽略它是否安全?
PS:样式正在按预期应用。
解决方案
使用瞬态道具
在 5.1.0 版本中,您可以使用瞬态道具。这样您就不需要额外的包装器,即减少了不必要的代码:
瞬态 props 是一种新模式,用于传递仅由样式化组件显式使用的 props,并不意味着向下传递到更深的组件层。以下是您如何使用它们:
const Comp = styled.div`
color: ${props => props.$fg || 'black'};
`;
render(<Comp $fg="red">I'm red!</Comp>);
注意道具上的美元符号($)前缀;这将其标记为瞬态,并且样式组件知道不将其添加到呈现的 DOM 元素或将其向下传递到组件层次结构中。
新的答案应该是:
样式化组件:
LS.NavFixedItem_LINK = styled(Link)`
display: flex;
justify-content: ${props => props.$tempLeftProp ? 'flex-start' : 'center'}; // '$' added
align-items: center;
`;
父组件:
function NavFixedItem(props) {
return(
<LS.NavFixedItem_LINK
to={props.link}
$tempLeftProp={props.toLeft} // '$' signals the transient prop
>
{props.name}
</LS.NavFixedItem_LINK>
);
}
推荐阅读
- react-native - 如何防止 SafeAreaProvider 自动隐藏 Expo SplashScreen?
- c# - C# System.Diagnostics.Process 无法正常工作
- moving-average - ETX(估计传输)如何在 contikiRPL 中实现?
- python - 在不重叠元素的情况下以唯一组合拆分列表列表
- c++ - 使用 v140 构建工具在 Visual Studio 2019 中构建 Google 测试项目时出现链接器错误
- ruby-on-rails - PG::UndefinedTable:错误:关系“merit_actions”不存在第 8 行
- ios - 在RelationshipSegue之后调用ViewController中的函数
- python - 移动滑块时更改音量
- python - 为什么 Scrapy 不能在脚本中编辑页面?
- java - 使用分区器的 Spring Batch 线程