)}class Message ext">
默认情况下,我希望我的lastMessage
支柱是一个带有id的对象。但是下面的代码显示为null
。
代码:
const App = ({ lastMessage }) => { // lastMessage is currently null
return (
<Message lastMessage={lastMessage} />
)
}
class Message extends Component {
constructor(props) {
super(props)
}
componentWillReceiveProps(nextProps) {
const data = [];
if (nextProps.lastMessage.id !== this.props.lastMessage.id) {
log.debug('woohoo');
// do something ...
}
}
render() {
return (
// something...
);
}
}
Message.defaultProps = {
lastMessage: {
id: 0,
},
};
在我的App
组件中,我将lastMessage
作为null
传递给Message
组件。但是我在defaultProps
组件中设置了Message
:
Message.defaultProps = {
lastMessage: {
id: 0,
},
我希望lastMessage
是一个带有id的对象,但是它仍然是空的。然后我的应用程序崩溃了,因为如果nextProps.lastMessage.id
是null
的话,lastMessage
就不能工作了
更奇怪的是,如果我删除我的应用程序组件中的lastMessage支柱:
const App = () => {
return (
<Message />
)
}
然后,消息组件将lastMessage
defaultProp
创建为带有id的对象。
如果我的道具是空的,我试图用默认值传递它。我试过这样的方法,但还是没有用:
const App = ({ lastMessage = { id: 0 } }) => { // lastMessage is still null
return (
<Message lastMessage={lastMessage} />
)
}
我是不是没有正确地设置defaultProps?
发布于 2017-08-24 13:54:51
如果将null
传递给Message组件,则基本上覆盖默认属性- lastMessage
。如果我正确地理解了您,那么当您移除将lastMessage
传递给Message组件时,它就会工作。它应该停在这边。
在将参数传递给组件之前,可以进行三元真实性检查:
<Message lastMessage={lastMessage ? lastMessage : undefined} />
正如您已经知道的,您还可以通过这种方式传递默认道具:
<Message lastMessage={lastMessage ? lastMessage : { id: 0 }} />
https://stackoverflow.com/questions/45871464
复制相似问题