reactjs - 根据反应中字符串数组中指定的顺序对组件进行排序
问题描述
我有一个字符串数组,它指定了我的组件的呈现顺序。
const requiredOrder = [ "Line1Component", "Line3Component", "Line2Component" ];
我也有名称与上面数组中的字符串匹配的组件。
我想根据 requiredOrder 数组中提到的顺序渲染组件。
当我尝试运行以下代码时,我得到:
Objects are not valid as a React child (found: object with keys {OrderredComponents}). If you meant to render a collection of children, use an array instead.
Minified: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
我试图将 return 语句包装在一个包装器中,但仍然无法找出问题所在。
我想避免这里提到的 case 语句,因为我的 requiredOrder 列表可能会变得非常大。
class OrderMyComponents extends React.Component {
render() {
const requiredOrder = [
"Line1Component",
"Line2Component",
"Line3Component"
];
const Line1Component = () => (
<div>
<b>Line 1</b>
</div>
);
const Line2Component = () => (
<div>
<b>Line 2</b>
</div>
);
const Line3Component = () => (
<div>
<b>Line 3</b>
</div>
);
const OrderredComponents = requiredOrder.map(function(item) {
return { item };
});
return <OrderredComponents />;
}
}
ReactDOM.render(
<OrderMyComponents />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="react"></div>
解决方案
我根据https://medium.com/@Carmichaelize/dynamic-tag-names-in-react-and-jsx-17e366a684e9创建了一个以组件名称作为键的对象
这解决了我的问题。
感谢agent_hunt和thakur-karthik的帮助。
const components = {
Line1Component: () => (
<div>
<b>Line 2</b>
</div>
),
Line2Component: () => (
<div>
<b>Line 2</b>
</div>
),
Line3Component: () => (
<div>
<b>Line 3</b>
</div>
)
};
class OrderMyComponents extends React.Component {
render() {
const requiredOrder = [
"Line1Component",
"Line2Component",
"Line3Component"
];
return requiredOrder.map((item, key) => {
const Component = components[item];
return <Component />;
});
}
}
ReactDOM.render(
<OrderMyComponents />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="react"></div>
推荐阅读
- java - Java Swing - 定时器中的 JTextArea 更新不恒定
- java - 使用java从列表中提取局部最大值和最小值
- google-sheets - 使用 IMPORTRANGE 时如何防止谷歌表格之间的自动更新
- javascript - 如何将值传递给模态
- javascript - 查找数组中排名最高的对象
- d3.js - 如何在 dc.js 中将多个 geojson 添加到 geochoropleth?
- react-native - Redux-persist 不保存 Expo/React Native 应用程序中的所有数据
- java - java新手;如何在条件句中使字符串静态?
- javascript - setState on button click and post axios
- linux - 每当我打开终端时,我都会得到 'bash: export: `/home/shameen:/usr/bin:/usr/local/bin': not a valid identifier'