在 React Native 和 CoffeeScript 中从对象构建层次视图
Build hierarchical view from object in react native & coffeescript
我想在 React native 中使用 Coffeescript 从分层对象构建视图,但结果我一直只获取子值。
考虑我的构造函数中的以下对象
this.state =
data: [
{
name: 'Category 1'
projects: [
{
id: 1,
name: 'Project 1'
},{
id: 2,
name: 'Project 2'
}
]
},{
name: 'Category 2'
projects: [
{
id: 3,
name: 'Project 3'
},{
id: 4,
name: 'Project 4'
}
]
}
]
我想从这个对象构建一个简单的视图(某物),比如
<View>
<Text>Category 1</Text>
</View>
<View>
<Text>Project 1</Text>
</View>
<View>
<Text>Project 2</Text>
</View>
<View>
<Text>Category 2</Text>
</View>
<View>
<Text>Project 3</Text>
</View>
<View>
<Text>Project 4</Text>
</View>
我最接近结果的是以下嵌套循环
<View>
{ this.state.data.map( ( category ) =>
<View><Text>{category.name}</Text></View>
category.projects.map( ( project ) =>
<View><Text>{project.name}</Text></View>
)
) }
</View>
但是这只会呈现项目(没有类别)。
我在这里错过了什么?我感觉这很明显,但我(再也)看不到了
编辑:
尽管@mjabadilla 解决方案在 JSX 中有效,但我无法将其转换为 Coffeescript,因此我更改了对象结构并使其以这种方式工作
this.state =
{
data: [
{
id: 1,
name: 'Category 1'
type: 'Category'
},{
id: 2,
name: 'Project 1'
type: 'Project'
},{
id: 3
name: 'Project 2'
type: 'Project'
},{
id: 4
name: 'Category 2'
type: 'Category'
},{
id: 5
name: 'Project 3'
type: 'Project'
},{
id: 6
name: 'Project 4'
type: 'Project'
}
]
}
{ this.state.data.map( ( prop ) =>
if prop.type == 'category'
<View><Text>Category: {prop.name}</Text></View>
else
<View><Text>Project: {prop.name}</Text></View>
) }
不像最初的方法那么干净,但至少它有效
您必须确保明确返回多行。请参阅我的小吃示例中的代码。您必须将其转换为 CoffeeScript
https://snack.expo.io/BkBS3vQhG
render() {
return (
<View>
{ this.state.data.map( ( category ) => {
return (
<View>
<Text>{category.name}</Text>
{category.projects.map( ( project ) => (
<View>
<Text>{project.name}</Text>
</View>))}
</View>
)
})}
</View>
);
}
我想在 React native 中使用 Coffeescript 从分层对象构建视图,但结果我一直只获取子值。
考虑我的构造函数中的以下对象
this.state =
data: [
{
name: 'Category 1'
projects: [
{
id: 1,
name: 'Project 1'
},{
id: 2,
name: 'Project 2'
}
]
},{
name: 'Category 2'
projects: [
{
id: 3,
name: 'Project 3'
},{
id: 4,
name: 'Project 4'
}
]
}
]
我想从这个对象构建一个简单的视图(某物),比如
<View>
<Text>Category 1</Text>
</View>
<View>
<Text>Project 1</Text>
</View>
<View>
<Text>Project 2</Text>
</View>
<View>
<Text>Category 2</Text>
</View>
<View>
<Text>Project 3</Text>
</View>
<View>
<Text>Project 4</Text>
</View>
我最接近结果的是以下嵌套循环
<View>
{ this.state.data.map( ( category ) =>
<View><Text>{category.name}</Text></View>
category.projects.map( ( project ) =>
<View><Text>{project.name}</Text></View>
)
) }
</View>
但是这只会呈现项目(没有类别)。
我在这里错过了什么?我感觉这很明显,但我(再也)看不到了
编辑: 尽管@mjabadilla 解决方案在 JSX 中有效,但我无法将其转换为 Coffeescript,因此我更改了对象结构并使其以这种方式工作
this.state =
{
data: [
{
id: 1,
name: 'Category 1'
type: 'Category'
},{
id: 2,
name: 'Project 1'
type: 'Project'
},{
id: 3
name: 'Project 2'
type: 'Project'
},{
id: 4
name: 'Category 2'
type: 'Category'
},{
id: 5
name: 'Project 3'
type: 'Project'
},{
id: 6
name: 'Project 4'
type: 'Project'
}
]
}
{ this.state.data.map( ( prop ) =>
if prop.type == 'category'
<View><Text>Category: {prop.name}</Text></View>
else
<View><Text>Project: {prop.name}</Text></View>
) }
不像最初的方法那么干净,但至少它有效
您必须确保明确返回多行。请参阅我的小吃示例中的代码。您必须将其转换为 CoffeeScript
https://snack.expo.io/BkBS3vQhG
render() {
return (
<View>
{ this.state.data.map( ( category ) => {
return (
<View>
<Text>{category.name}</Text>
{category.projects.map( ( project ) => (
<View>
<Text>{project.name}</Text>
</View>))}
</View>
)
})}
</View>
);
}