2017-04-18 6 views
0

hereという反応の日付ピッカーコンポーネントを使用しています。このコンポーネントは、見過ごされているものを除いてかなり素晴らしいです。willReceivePropsを実装していません。言えば、react willReceiveProps外部ライブラリの回避策

、Iは以下のようにdatpicker作成:私はstartDateを通るプロパdefaultValueがあること

<DateField 
    dateFormat= { dateFormat} 
    forceValidDate={true} 
    defaultValue={startDate || ''} 
    onChange={this.handleChange.bind(null, 'start_date')} 
    id="start" 
> 
    <DatePicker 
    navigation={true} 
    locale="en" 
    forceValidDate={true} 
    highlightWeekends={true} 
    highlightToday={true} 
    weekNumbers={true} 
    weekStartDay={0} 
    /> 
</DateField> 

注上記。さて、startDateは、時にはコンポーネントの外部にある理由から変更することができます。この値は、通常のように新しいrender()アクション中に渡されます。反応哲学によると、これは問題ではないはずです。

defaultValueの値がDateFieldの中で一度しか読み取られないように見えます。それはthis.props.defaultValueと読み替えられます。小道具に頼ってコンポーネントを構築したことがある人は、これが問題であるとすぐに認識するはずです。これは、小道具が変更されたときに新しい値が使用されないことを意味します。

これはライブラリなので、私は単にwillReceivePropsを実装することはできません。誰もが、このコンポーネントをrenderまたは他の戦略で完全にリセットして、大きな設計上の問題と思われるものを処理するための良い回避策を知っていますか?

+1

'key = {startDate}'を 'DateField'に追加すると、startDateが変更されたときに再レンダリングされると思います。 – elmeister

+0

あなたは 'willReceiveProps'を実装していないことを二重に確信していますか?なぜなら、必ずしもそれを実装する必要はないので、反応はコンポーネント自体を更新するからです。あなたのコードで 'shouldComponentUpdate()'を使用しましたか? – iamsaksham

答えて

2

これらは、<input>コンポーネントと同じ標準に従います。 defaultValueは一度だけ読み取られますが、外部で設定できるvalueもあります。彼らはwillReceivePropsを使用する必要はありません。

つまり、defaultValueの代わりにvalueを使用します。私はコードにビットを探していますし、プロパティtextvalueから離れdateもあるようだ。

Uncontrolled Components in React

PSを参照してください。コード(およびドキュメント)がgithubから削除されているので、私はそれらの小道具の違いは何かを調べません。

+0

ありがとうございます。詳しく説明してくれてありがとうございます。私はかなり新しく反応していて、この標準が存在することを知らなかった。 'value'は正常に動作しました。 – melchoir55