【发布时间】:2018-03-03 21:46:34
【问题描述】:
我对 ReactNative 很陌生,而且我的 javascript 也不是很好,所以如果这很愚蠢,请原谅我(我已经搜索了整个 google 和 stackoverflow,但似乎无法找到我问题的直接答案):
我定义了一个简单的组件:
export default class SPlanet extends React.Component {
constructor(props) {
super(props)
}
render() {
const planet = this.props ? this.props.planet : null;
console.log(planet);
return (
<View>
<Text>{this.props.planet}</Text>
</View>
);
}
}
在 app.js 中调用如下:
<SPlanet planet={planetDB.Atraxia}/>
并且该对象的定义如下:
const planetDB = {
Atraxia : {
type : "gas",
name : "Atraxia",
economy : 10,
resources : 3,
loyalty : "70%",
side : "enemy"
},
}
现在这基本上可以工作了(它不会抛出任何错误)。它只会将对象传递给控制台日志,但不会在文本中显示任何内容。
但如果我只想显示名称怎么办?我试过了
console.log(planet.name);
但抛出错误:“undefined is not an object”
我也尝试将它作为一个简单的数组发送并像这样调用它
console.log(planet[0]);
但我得到同样的错误。
我确信这是我的一个愚蠢的错误,我错过了一些语言的基础知识,但我很难过。帮忙?
【问题讨论】:
-
试试
if (planet) console.log(planet.name);;这样如果第一次调用你的组件时没有传递行星道具,它就不会失败 -
@Ben 感谢您的提示,这是一个在我测试它时防止它崩溃的好主意。但是关于如何获取该对象数据的任何想法?
-
如前所述,您的代码应该可以工作,您应该能够访问您的属性 if planet props 不为空。也就是说,取决于您的代码,并且因为反应重新渲染,我只是希望它会失败,因为它在您第一次调用组件时没有通过(如果产品以某种方式为空,
console.log(product)将通过,console.log(product.name)赢了't,但如果在重新渲染道具后可以有效地通过)。试试这个gard,你可能会看到不同;如果没有,请发送更多代码 (app.js) -
@Ben 你是对的,行星显示为空。那么如何让它通过道具呢?
-
如前所述,您的代码应该可以工作,但如前所述,如需进一步帮助,
send more of your code (app.js)
标签: javascript reactjs react-native jsx