2017-12-30 36 views
0

イメージコンポーネントを作成していて、コンポーネント受信プロンプトに固執しています。ここで 初期状態をcomponentwillreceivepropsで設定しますか?

class ImageField extends React.Component { 

constructor(props) { 
    super(props); 
    this.state = { 
    image: '', 
    imagePreviewUrl: '', 
    }; 
} 

componentWillReceiveProps(newProps){ 
    if (newProps.content === this.props.content) { 
    return; 
    } 

    this.setState({ 
    image: this.props.content 
    }, function() { 
    console.log(this.state.image) 
    }) 
} 

私はcomponentWillReceiveProps火災がそれにthis.state.imageを設定する必要があることのImageFieldコンポーネントにJSONのブロックを送信フォームを反応させるんだ...コンポーネントの要旨ですjsonブロック。

それを設定したことがない、それはそれはthis.state.image

ためundefinedを返しますCONSOLE.LOG当たったとき、私はthis.setStateをすれば今回、それはthis.state.imageが、ドン」にJSONを書き込み、しかし、おそらくそれをやって間違った方法であるので、それをやりたい。

こんなことはどうしたらいいですか?

+1

'this.setState({image:newProps.content}、...})'ではいけませんか? 'this.props'で設定します。これは' componentWillReceiveProps'で設定される前に未定義です。 – margaretkru

+0

this.newProps.contentをsetStateに入れたくありませんか? newPropsには、渡された値が含まれます。 – bluesixty

答えて

1

最初にコンポーネントが最初に作成されたときに、componentWillReceiveProps()が呼び出されず、コンストラクタが初期のプロップで呼び出されるため、コンストラクタの状態を初期化する必要があります。あなたがnewPropsを使用してsetState()を呼び出すように

constructor(props) { 
    super(props); 
    this.state = { 
    image: props.content, 
    imagePreviewUrl: '', 
    }; 
} 

次は、以下のようにcomponentWillReceiveProps()を変更します。

componentWillReceiveProps(newProps){ 
    if (newProps.content === this.props.content) { 
    return; 
    } 

    this.setState({ 
    image: newProps.content 
    }, function() { 
    console.log(this.state.image) 
    }) 
} 
+1

素晴らしい、ありがとう! –

関連する問題