2017-09-14 22 views
1

私はパラメータと呼ばれる店舗オブジェクト(JAVA APIと相互作用するために接続するReact-Redux App)を持っています。私の新しいコンポーネントで小道具で(店舗)変更する

私は入力ダニボックスの電気ショック療法を更新するときに、このオブジェクトが別のコンポーネントに更新されます...

私は私にJSONとしていくつかの処理の後、このオブジェクトを送信「をテンプレートとして保存」ボタンを持っていますAPI。

奇妙な機能を持つ新しいコンポーネント内のこのオブジェクト(パラメータ)の変更をCATCHする必要があります。

私はそれに一連の "if"テストを実行するかもしれないので、いくつかの入力が欠落しているかどうかを見て、 "Save as template"ボタンを隠すかグレーアウトしてください。

これは可能ですか?

componentDidMount() { 

} 

componentWillReceiveProps() { 

} 

多くの助けであるように思われません。

+1

コードを投稿できますか? –

+1

そのサウンドから 'render()'関数からすべてを行うことができます。 – Aaron

+1

レンダリングメソッドでオブジェクトを検証し、検証が失敗した場合はボタンを使用不可にすることができます。このためにライフサイクルメソッドを使用する必要はありません。 – trixn

答えて

2

これは私が数回使用しなければならなかったパターンです。これを処理するためにlodash.isEqualを使用しました。

import { isEqual as _isEqual } from "lodash" 

あなたはパラメータを保存します。たとえばmapStateToPropsであなたのコンポーネントでそれを監視しています(またはただし、他のあなたはそれへのアクセス権を取得している)あなたにオブジェクトをしていると言う:

const mapStateToProps = (state) => ({ 
    parameters: state.someApp.parameters, 
}); 

あなたはあなたのコンポーネントで何か変更があったかどうかを確認できます.WillReceiveProps:

componentWillReceiveProps(nextProps) { 
    if(!_isEqual(this.props.parameters, nextProps.parameters)) { 
     this.props.sendSomeRequestWithParameters(nextProps.parameters) 
    } 
} 
+0

それはかなりクールな感謝のです。私のレンダリングとリターンの間に2つのブール値(実際には2つのパラメータオブジェクトがあります)を宣言し、その中に私の "if"テストバッテリーに対する答えを格納することができます。私のボタンのレンダリングの中で、私はif(booleanOne || booleanTWO)に基づいて表示することを決めた2つのセットのうちのどれを決定することができます。私の言いたいことを見て? – tatsu

関連する問題