在 ReactJS 组件中设置默认值
Setting default value in ReactJS component
我有一个呈现“react-icons”对象的组件。
但是,如果没有提供图标,我想在 UI.
上显示“NoIcon”字符串
组件 A 就是这样。
组件 A
import React from 'react';
import { FaHeart} from "react-icons/fa";
const Icon = ({FaIcon = "NoIcon"}) => {
return (
<div>
<FaIcon/>
</div>
);
};
export default Icon;
并从另一个 组件 B 调用此组件有效:
组件 B
import React from 'react';
import Icon from './components/icons/icon';
import { FaHeartBroken } from "react-icons/fa";
class App extends React.Component {
render(){
return(
<Icon FaIcon={ FaHeartBroken }/>
)
}
}
export default App;
这 return 是一个“心碎图标”,即
但是,如果 组件 B 中没有提供图标,它应该 return 文本,即 UI 中的“NoIcon”。
组件 B
....
....
<Icon FaIcon/>
....
但是这会引发错误
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: boolean.
Check the render method of `Icon`.
我也尝试在组件A上设置一个or
方法来赋值,也没有用。
为什么在 Icon
组件中不提供任何参数,而要求进行布尔检查?
组件 A
const Icon = ({FaIcon = FaHeart || "NoIcon"}) => {
....
还尝试了这些变化。这些不会引发任何错误,但也不会 return UI 上的任何值。
组件 B
...
<Icon/>
<Icon FaIcon = "Test"/>
<Icon FaIcon = {"Test"}/>
我们如何解决这个问题?
没有值 <Foo bar />
的 prop 实际上是 shorthand for <Foo bar={true} />
.
所以这个:
<Icon FaIcon/>
不正确。如果您再次阅读该错误,现在可能更有意义:
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: boolean.
这意味着它期待一个 string/class/function,但却得到了一个布尔值。在这种情况下 true
来自道具 shorthand 值。
这意味着你如何省略那个道具,然后你得到默认值。
<Icon />
其次,这行不通:
const Icon = ({FaIcon = "NoIcon"}) => {
return (
<div>
<FaIcon/>
</div>
);
};
要将自定义内容呈现为 JSX
,它必须是一个组件。来自 react-icons/fa
的导入是一个组件,但字符串 "NoIcon"
不是。
我认为在这种情况下,有一个条件可能更简单,如果 prop 存在则呈现图标,否则呈现字符串。
类似于:
const Icon = ({FaIcon}) => {
return (
<div>
{ FaIcon ? <FaIcon/> : "NoIcon" }
</div>
);
};
如果你想要一个道具来处理一个图标组件或一个字符串,你可以通过几种方式来实现。但是如果你希望能够传入图标组件或字符串,那么你可以这样做:
const Icon = ({FaIcon = "NoIcon"}) => {
return (
<div>
{ typeof FaIcon === 'string' ? FaIcon : <FaIcon/> }
</div>
);
};
在这种情况下,如果 prop 是一个字符串(也适用于 "NoIcon"
的默认值),则将其呈现为一个字符串。否则假设它是一个组件并渲染它。
我有一个呈现“react-icons”对象的组件。 但是,如果没有提供图标,我想在 UI.
上显示“NoIcon”字符串组件 A 就是这样。
组件 A
import React from 'react';
import { FaHeart} from "react-icons/fa";
const Icon = ({FaIcon = "NoIcon"}) => {
return (
<div>
<FaIcon/>
</div>
);
};
export default Icon;
并从另一个 组件 B 调用此组件有效:
组件 B
import React from 'react';
import Icon from './components/icons/icon';
import { FaHeartBroken } from "react-icons/fa";
class App extends React.Component {
render(){
return(
<Icon FaIcon={ FaHeartBroken }/>
)
}
}
export default App;
这 return 是一个“心碎图标”,即
但是,如果 组件 B 中没有提供图标,它应该 return 文本,即 UI 中的“NoIcon”。
组件 B
....
....
<Icon FaIcon/>
....
但是这会引发错误
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: boolean.
Check the render method of `Icon`.
我也尝试在组件A上设置一个or
方法来赋值,也没有用。
为什么在 Icon
组件中不提供任何参数,而要求进行布尔检查?
组件 A
const Icon = ({FaIcon = FaHeart || "NoIcon"}) => {
....
还尝试了这些变化。这些不会引发任何错误,但也不会 return UI 上的任何值。
组件 B
...
<Icon/>
<Icon FaIcon = "Test"/>
<Icon FaIcon = {"Test"}/>
我们如何解决这个问题?
没有值 <Foo bar />
的 prop 实际上是 shorthand for <Foo bar={true} />
.
所以这个:
<Icon FaIcon/>
不正确。如果您再次阅读该错误,现在可能更有意义:
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: boolean.
这意味着它期待一个 string/class/function,但却得到了一个布尔值。在这种情况下 true
来自道具 shorthand 值。
这意味着你如何省略那个道具,然后你得到默认值。
<Icon />
其次,这行不通:
const Icon = ({FaIcon = "NoIcon"}) => {
return (
<div>
<FaIcon/>
</div>
);
};
要将自定义内容呈现为 JSX
,它必须是一个组件。来自 react-icons/fa
的导入是一个组件,但字符串 "NoIcon"
不是。
我认为在这种情况下,有一个条件可能更简单,如果 prop 存在则呈现图标,否则呈现字符串。
类似于:
const Icon = ({FaIcon}) => {
return (
<div>
{ FaIcon ? <FaIcon/> : "NoIcon" }
</div>
);
};
如果你想要一个道具来处理一个图标组件或一个字符串,你可以通过几种方式来实现。但是如果你希望能够传入图标组件或字符串,那么你可以这样做:
const Icon = ({FaIcon = "NoIcon"}) => {
return (
<div>
{ typeof FaIcon === 'string' ? FaIcon : <FaIcon/> }
</div>
);
};
在这种情况下,如果 prop 是一个字符串(也适用于 "NoIcon"
的默认值),则将其呈现为一个字符串。否则假设它是一个组件并渲染它。