2017-08-24 4 views
0

デフォルトでは、私のlastMessage propをidのオブジェクトにしたいと思います。しかし、下のコードではnullとなります。defaultPropsが正常に動作しない

コード:私のAppコンポーネントで

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, 
    }, 
}; 

私はnullMessageにコンポーネントとしてlastMessageを渡します。しかし、私はMessageコンポーネントにdefaultPropsを設定します。私はlastMessageはidを持つオブジェクトであることを期待

Message.defaultProps = { 
    lastMessage: { 
     id: 0, 
    }, 

、しかしそれはまだnullです。 nextProps.lastMessage.idが動作しない私のアプリがクラッシュしたので、私は私のアプリのコンポーネントでlastMessageの小道具を削除する場合lastMessageがさえ知らない人null

されている場合は、:

const App =() => { 

    return (
     <Message /> 
    ) 
} 

、メッセージコンポーネントが持つオブジェクトとしてlastMessagedefaultPropを作成しますid。

私の小道具がnullの場合、デフォルト値で渡そうとしています。私はこのようなものを試しましたが、それでも動作しません:

const App = ({ lastMessage = { id: 0 } }) => { // lastMessage is still null 

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

私はdefaultPropsを正しく設定していませんか?

+0

明示的に 'null'なのでを渡す:あなたも考え出したとして、あなたはまた、デフォルトの小道具をこのように渡すことができ

<Message lastMessage={lastMessage ? lastMessage : undefined} /> 

proptypes検証のための値です。代わりに 'undefined'を渡すとうまくいくでしょう。とにかくif文を編集する代わりに、 'lastMessage'が真であると評価されてから' idMod'にアクセスしようとしています。 – trixn

答えて

1

メッセージコンポーネントにnullを渡すと、基本的にデフォルトプロパティ-が上書きされます。私があなたを正しく理解していれば、メッセージコンポーネントにlastMessageを渡すことを取り除くと動作します。それはこのようにとどまるべきです。

あなたはコンポーネントに引数を渡す前に、三元truthinessチェックを行うことができます

<Message lastMessage={lastMessage ? lastMessage : { id: 0 }} /> 
+0

しかし最終的にlastMessageは本当の値を持ちますので、それを渡したい – user2456977

+0

IDにアクセスする前に、メッセージが偽でないかどうかをコンポーネントが小道具で確認します。 –

+0

'Messageコンポーネントにnullを渡すと、デフォルトのプロパティを基本的に上書きします。' ----は、チェックを行う方法です。propがnullの場合、デフォルト値で渡しますか? – user2456977

関連する問題