Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >响应defaultProps不按预期工作

响应defaultProps不按预期工作
EN

Stack Overflow用户
提问于 2017-08-24 13:52:14
回答 1查看 4.5K关注 0票数 0

默认情况下,我希望我的lastMessage支柱是一个带有id的对象。但是下面的代码显示为null

代码:

代码语言:javascript
运行
AI代码解释
复制
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

代码语言:javascript
运行
AI代码解释
复制
Message.defaultProps = {
    lastMessage: {
        id: 0,
    },

我希望lastMessage是一个带有id的对象,但是它仍然是空的。然后我的应用程序崩溃了,因为如果nextProps.lastMessage.idnull的话,lastMessage就不能工作了

更奇怪的是,如果我删除我的应用程序组件中的lastMessage支柱:

代码语言:javascript
运行
AI代码解释
复制
const App = () => {

    return (
        <Message />
    )
}

然后,消息组件将lastMessage defaultProp创建为带有id的对象。

如果我的道具是空的,我试图用默认值传递它。我试过这样的方法,但还是没有用:

代码语言:javascript
运行
AI代码解释
复制
const App = ({ lastMessage = { id: 0 } }) => { // lastMessage is still null

    return (
        <Message lastMessage={lastMessage} />
    )
}

我是不是没有正确地设置defaultProps?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-24 13:54:51

如果将null传递给Message组件,则基本上覆盖默认属性- lastMessage。如果我正确地理解了您,那么当您移除将lastMessage传递给Message组件时,它就会工作。它应该停在这边。

在将参数传递给组件之前,可以进行三元真实性检查:

代码语言:javascript
运行
AI代码解释
复制
<Message lastMessage={lastMessage ? lastMessage : undefined} />

正如您已经知道的,您还可以通过这种方式传递默认道具:

代码语言:javascript
运行
AI代码解释
复制
<Message lastMessage={lastMessage ? lastMessage : { id: 0 }} />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45871464

复制
相关文章

相似问题

如何使用openpyxl返回列字母而不是列号?

111

如何使用列号引用Excel列而不是列字母

24

使用列号而不是列字母引用范围

10

如何添加列而不是openpyxl行?

25

使用列号而不是列名

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档