javascript - 我可以在 JSX 标签中使用模板文字吗?
问题描述
我基本上希望在我正在制作的组件中呈现可变组件,这将根据用户在道具中提供的输入而有所不同,但我想避免不必要的if
陈述等。
我能做到吗?例如,如果weather
prop 由用户定义为Sun
,则<{weather}/>
与 相同<Sun />
。
解决方案
在 React 中,以大写字母开头的名称将编译为 createComponent 方法。因此,考虑到这一点,正确的解决方案是将名称值分配给大写变量(见下文)。
const WeatherComponent = props => {
const ComponentTagName = props.weather;
return <ComponentTagName />
}
我喜欢使用的另一种技术是在对象中映射子组件。这使得组件更易于配置(和重用),因为只需要缩写键而不是完整的组件名称。
import React from 'react';
import SunComponent from './sun-component';
import RainComponent from './rain-component';
const WeatherComponents = {
Sun: SunComponent,
Rain: RainComponent
};
const WeatherComponent = (props) => {
const TagName = WeatherComponents[props.weather || 'Sun'];
return <TagName />
}
export default MyComponent;
推荐阅读
- wpf - 如何使用 Xamarin.Forms、WPF 和 Syncfusion 控件在屏幕上呈现 PDF?
- typescript - TypeScript Vuetify 项目 - 使用 Two.js Text 渲染多行文本
- swift - 创建通用 Alamofire 服务的问题
- php - 如何通过 Ajax 将 onchange 选择中的值传递给 wp 函数并在页面上显示
- storybook - 带有包裹的嵌套 Package.json 故事书
- c - 架构 x86_64 VSCode 错误的未定义符号
- javascript - 为什么这个 React 返回码无效?(条件渲染)
- android - RecyclerView 适配器在 Fragment 内给出空异常
- python - 该函数没有返回值
- javascript - 这两种编写构造函数的方式有区别吗?