从 JSON 渲染 React Native 元素
Posted
技术标签:
【中文标题】从 JSON 渲染 React Native 元素【英文标题】:Render React Native Elements from JSON 【发布时间】:2017-08-11 02:48:07 【问题描述】:我已经四处搜索...找不到我要找的东西,所以我很感激任何帮助!这就是我的目标:
我正在为 React Native 应用构建类似 CMS 的设置。这样,应用程序的管理员就可以登录到 CMS 仪表板,并更新应用程序的页面/视图,而无需进入硬编码。我希望他们能够从预设的组件列表中进行选择,并能够以他们想要的任何顺序将它们拖放到应用程序中,并且能够更新内容和颜色等。让我举个例子……
我想象有一个主页,顶部有一个旋转横幅,然后是一个用于信息模式的按钮,然后是一组用于转到子子页面的菜单链接。
所以我认为,在开发方面,是给应用管理员一个所见即所得类型的设置,并将结果存储在数据库中。它可以在数据库中存储为:
<RotatingBanner />
<Modal />
<ContentMenu>
<ContentMenuLink title="About" />
<ContentMenuLink title="Competitive" />
<ContentMenuLink title="Recreational" />
<ContentMenuLink title="Tournaments" />
<ContentMenu />
现在,当我尝试将它呈现到屏幕上时,我会继续让它呈现为实际的单词与它们所代表的组件,如果这有意义的话。所以页面看起来就像上面的代码块,而不是看到一个旋转的横幅和模式等。
我尝试了一种将 html 转换为 React Native 元素的工具...有人知道我如何转换获取的 JSON 格式,如下所示:
content: "<RotatingBanner /><Modal /><ContentMenu>...."
并让它在渲染函数中创建真正的组件?如果您愿意,我们将不胜感激有关创建此类 CMS 的任何其他想法或想法/建议。
谢谢!
【问题讨论】:
那么你基本上需要的是一个json控制的视图,对吧?您可以通过首先创建组件来简单地实现这种需求。像内容菜单、旋转横幅等,然后用地图功能渲染它们。 ` return this.jsonResponseElementsArray.map((value, index)=> switch(value) case 'rotatingBanner': return假设你有这个 JSON:
const data =
"components": [
"name": "component1", props: "hello": "world",
"name": "component2", props: "color": "red",
]
制作您的组件,然后在对象(地图)中引用它们:
import Component1 from './Component1'
import Component2 from './Component2'
const COMPONENT_MAP =
component1: Component1,
component2: Component2,
然后制作你的包装组件:
const Wrapper = (data) => (
<View>
data.components.map((name, props) =>
const Component = COMPONENT_MAP[name]
return <Component ...props />
</View>
)
瞧 :)
<Wrapper data=data />
【讨论】:
谢谢@antoine129 l。我不这解决了data = components: [ "<RotatingBanner /><Modal />" ]
的特定用例
确实,但是解决这个用例需要 JSX 解析,我建议不要这样做。
我认为这不能回答最初的用例,但我会给予奖励,因为至少你提出了理想的方案。【参考方案2】:
我建议使用数组来保存和渲染多个孩子
const Component1 = () => <Text>One</Text>
const Component2 = () => <Text>One</Text>
const childs = [
Component1,
Component2
]
return childs
React 能够按原样呈现数组。 其他可能的解决方案是,
return Object.keys(child).map(item => childs[item] )
【讨论】:
【参考方案3】:快速解决方案可以是react-native-dynamic-render
此外,您可以使用它渲染嵌套组件。
一个完整的例子是here
【讨论】:
以上是关于从 JSON 渲染 React Native 元素的主要内容,如果未能解决你的问题,请参考以下文章
react-native - 图像需要来自 JSON 的本地路径
不变违规:元素类型在 createMaterialTopTabNavigator()/MaterialTopTabView 渲染方法中无效,React Native w/React Navigatio