私は反応の面で還元を学んでいて、Destinyからいくつかの情報をキャッチするための最初のアプリを実行し、ユーザーのために提示しました。このアプリケーションには、多くのアクティビティの1つを選択できる選択ボックスがあり、そのアクティビティを保存してActivityComponentのAPIをチェックすると、問題が発生します(アクティビティ識別子をreduxで取得してストアに保存します)その後、私はActivityComponentに取得するために持っていますが、どういうわけか、私はこれを実装する必要がありました:https://github.com/persocon/destiny-weeklyReactJS + Reduxを使用する場合、componentWillReceivePropsとreplacePropsが必要ですか?
答えて
したがって、迅速な回答はいいえではありません。どうして ?まあ、あなたはまだ、レキシックスを使っていません。あなたが、getAjaxを置き換える小道具でやっているそのajax呼び出しを見ると、私はあなたのコードベースでそれを調べ、要求を受け取った後でコンポーネント内でsetStateを呼び出しているのを見ます。
reduxでは、代わりにアクションとレデューサーを使用します。アクションは、apiを呼び出して、このデータを受け取った後、レデューサーでreduxの "ストア"の状態をレデューサーで設定して処理されます。
これで完全な例は、次のようなものになります。redux-thunkを最初に追加してください。これは間違いなく今後の進め方に役立ちます。READMEの例を読んで、方法と理由。
function startLoading() {
return {
type: 'LOADING_STARTED',
isLoading: true
}
}
function doneLoading(){
return {
type: 'LOADING_ENDED',
isLoading: false
}
}
function setActivity(result) {
let lastGist = result[0];
let activity = {
identifier: result.display.identifier,
title: (result.display.hasOwnProperty('advisorTypeCategory'))? result.display.advisorTypeCategory : '',
name: (result.hasOwnProperty('details') && result.details.hasOwnProperty('activityName')) ? result.details.activityName : '',
desc: (result.hasOwnProperty('details') && result.details.hasOwnProperty('activityDescription')) ? result.details.activityDescription : '',
backgroundImg: (result.display.hasOwnProperty('image')) ? 'http://bungie.net' + result.display.image : '',
modifiers: (result.hasOwnProperty('extended') && result.extended.hasOwnProperty('skullCategories')) ? result.extended.skullCategories : [],
bosses: (result.hasOwnProperty('bosses')) ? result.bosses : [],
items: (result.hasOwnProperty('items') && result.display.identifier == "xur") ? result.items : [],
bounties: (result.hasOwnProperty('bounties')) ? result.bounties : []
}
return {
type: 'SET_ACTIVITY',
activity: activity
}
}
export function findActivity(activity_id) {
return dispatch => {
dispatch(startLoading())
$.get(activity_id, (result)=>{
dispatch(doneLoading())
if(response.status == 200){
dispatch(setActivity(response.json))
}else {
dispatch(errorHere)
}
})
}
}
は、だから、最初は威圧的なビットに見えるかもしれませんが、外出先または2の後、それは代わりのコンポーネントで、このようなことをやって、より自然な感じになります。
replacePropsの必要があるべきではありません。誰も私を助けることができれば、ここまあ
componentWillReceiveProps(nextProps) {
this.props = {};
this.replaceProps(nextProps, cb => this.getAjax());
}
replaceProps(props, callback){
this.props = Object.assign({}, this.props, props);
this.setState(initialState);
callback();
}
をgithubの上の私のリポジトリです小道具が自動的に更新されるので、 componentWillReceivePropsは、このライフサイクルに来るものを覗いてみるチャンスです。
注:内部で使用されているように、this.props
を決して壊さないでください。
選択されたアクティビティが変更されているかどうかを確認するために、this.propsとcomponentPreviousPropsのnextPropsを比較することをお勧めします。もしそうなら、ajax呼び出しを起動します(コンポーネントに渡されたreduceアクションを使用することをお勧めします)。
はええ、私は申し訳ありませんが、SelectContainer.jsxに今私が選択し、変更後の活動のJSONを取得することをやってる(笑)コメントめちゃくちゃ:
const mapDispatchToProps = (dispatch) => {
return {
onSelectChange: (activity) =>{
dispatch(changeApiUrl(activity));
dispatch(findActivity(activity));
}
}
}
UPDATEを
import { connect } from 'react-redux';
import { changeApiUrl, findActivity } from '../actions/index.jsx';
import ActivityComponent from '../components/ActivityComponent.jsx';
const mapStateToProps = (state) => {
return state.activity;
}
export class ActivityContainer extends ActivityComponent {
componentDidMount() {
const { dispatch, identifier } = this.props;
dispatch(findActivity(identifier));
}
}
export default connect(mapStateToProps)(ActivityContainer);
一般的に還元剤と反応する方法のライフサイクルについて言えば、あなたはreduxメソッドを使うべきです。反応ライフサイクルメソッドで使用する必要がある場合を除きます。
- 1. reduxを使用する場合、this.setState()を使用する必要がありますか?
- 2. ドローコールミニマイザを使用する場合、アトラステクスチャが必要ですか?
- 3. angular2でreduxを使用すると意味がある場合
- 4. ReduxとReact-Reduxを使用している場合、Reactコンポーネントの状態は必要ありませんか?
- 5. componentWillReceiveProps in ReactネイティブとReactJS
- 6. クラスデコレータを使用する場合、Angular2リフレクションメタデータシムが必要です
- 7. スティッキセッションを使用する場合、SignalRバックプレーンは必要ですか?
- 8. mapDispatchToPropsが既にある場合、redux-thunkが必要な理由
- 9. Reduxでは、この場合、データにアクセスするためにストアをインポートする必要がありますか?
- 10. 個人用レジストリを使用する場合、kubernetesにインターネットアクセスが必要ですか?
- 11. reactjs componentWillReceivePropsの小道具をリセットする
- 12. コールcomponentWillReceiveProps()リアクト/ Reduxの
- 13. リアクションツール:BabelifyでBrowserifyを使用する場合、Babel-CLIが必要ですか?
- 14. なぜこの状況でcomponentWillReceivePropsが必要なのですか?
- 15. reactjsとreduxのMaterial-UIチェックボックスを使用
- 16. 子孫セレクタを使用する必要がある場合
- 17. ウェブサービスを使用する必要がある場合
- 18. スカラリカバリを使用する必要がある場合:
- 19. Container :: clearResolvedInstanceを使用する必要がある場合
- 20. OAuthSwiftとidentityserver3を使用する場合に必要なサンプルコード
- 21. Linq to Entitiesを使用する場合は、別のデータレイヤーが必要ですか?
- 22. クローキングパターンを使用する場合は仮想デストラクタが必要ですか?
- 23. C++を使用する場合、EclipeにJDKが必要ですか?
- 24. Xcode:MapKitを使用する場合、ビューベースのアプリケーションが必要ですか?
- 25. Appdynamicsを使用する場合、ELKスタックまたはGraphiteが必要ですか?
- 26. カスタムAccessDecisionManagerを使用する場合(実際のユースケースが必要)
- 27. React + Redux統合にはReact.createClassのみが必要ですか?
- 28. SQL Developerを使用している場合、Oracle 11g Clientが必要ですか?
- 29. ++ varを使用する必要がある場合はありますか?
changeApiUrlを私の選択で実行すると、実際に識別子が取得され、すぐにajaxが呼び出され、結果がreduxストアに格納されるはずです。 ; o –
はい、私はgithubであなたのsrcに基づいてコードサンプルを追加しようとします: – TameBadger
COOL!私は完全に仲間に感謝します –