2017-03-09 1 views
1

私は通常と同じように使用できるように、このようなグローバルReduxストアにまだアクセスできるクラスをReactで作成することはできますか?

class Person { 
    constructor(fname, lname) { 
    this.fname = fname; 
    this.lname = lname; 
    } 
} 

のようなクラスを作成したいと思います:

let temp = new Person('John', 'Doe'); 

が、私は、そのクラスへのアクセスにグローバルストアを持つことができる方法はありますか?私はそれができない場合があります考え出し

constructor(props, context) { 
    super(props, context); 
} 

class Person { 
    constructor() { 
    this.fname = this.props.fname; 
    this.lname = this.props.lname; 
    } 
} 

function mapStateToProps(state) { 
    return { 
    fname: state.person.fname, 
    lname: state.person.lname 
    }; 
} 
export default connect(mapStateToProps)(Person); 

が、リアクトコンポーネントのコンストラクタがそうなので

がために:

私のような何かをするのが大好きですか?しかし、私はそれが多くを助けるようにとにかく尋ねたかった。ありがとう

+1

は 'this.props'が内部で何だろうことができ、あなたの人のクラスから、次の構文

import { createStore } from 'redux'; import rootReducer from '../reducers'; export let store = null; // placeholder for store singleton once created export function init(initialState = {}){ store = createStore(rootReducer, initialState); return store; } 

を使用することをお勧めします'新しいPerson'? – Bergi

+0

@BergiもしMapStateToPropsを使ってReduxストアに接続できるのであれば、fnameとlnameの変数がローカルの小道具に追加されます。うまくいけば、私が達成しようとしていることがもっと明確になるように、「接続する」行を追加しました – user1189352

答えて

1

通常のクラスは反応コンポーネントと同じタイプのライフサイクルを経ないため、ここではconnectは意味をなさないでしょう。

また、同じ状態を複数の場所に保存しないようにしたいとします。還元の全ポイントは、州を統合し、あなたのためにそれを管理することです。だから私はあなたの代わりにこれを行うには

、代わりにReduxの状態とthis.fname間の同期をmanangeしようとしているのlnamefname電流を知っている必要がありますいずれかの方法でthis.lname

store.getState()を呼び出して、あなたは現在の storeを公開しなければならないことをお勧めしますあなたがすでにやっているかもしれない何らかの種類の importを通して。あなたはまだこれをやっていない場合

、私はあなたが単に

import { store } from '../store'; 

function mapStateToProps(state) { 
    return { 
    fname: state.person.fname, 
    lname: state.person.lname 
    }; 
} 

export default class Person() { 
    constructor(){ 
    } 

    toString() { 
     // example method 
     let { fname, lname } = mapStateToProps(store.getState()); 
     return `${fname} ${lname}`; 
    } 
} 
1

いいえ、connectは、そのようなプレーンなクラスでは機能しません。これは、小道具や文脈を介して店にアクセスし、Reactコンポーネントを受け入れ/使用するため、Reactコンポーネントでのみ機能します。

インポートを使用してストアオブジェクトに直接アクセスする必要があります。 であり、店舗登録プロセスの管理に役立つ数多くのユーティリティがあります。おそらくその1つが役立つかもしれません。私のリストはRedux addons catalog: Store - Store Change Subscriptionsです。

究極的には、実際にはすべてstore.subscribe()と呼ばれ、サブスクリプションコールバックでstore.getState()で処理します。

関連する問題