6

ユーザーが要求したときにサーバーからデータをロードする必要がある単純な反応コンポーネントがあります。問題は、動的変数スピーカーUrlを転送して、コンポーネントのロード状態の前にアクセスする方法がわからないことです。確かにからアクセスできますthis.props.paramsが、コンポーネントがロードされておらず、graphqlクエリを作成するとアクセスできません。クエリ - QuerySpeakerURL 変数を手動で設定すると正常に動作します。

ルーター

<Route path="/speaker/:speakerUrl" component={SpeakerPage} />

コンポーネント - SpeakerPage

import React from 'react';
import { graphql } from 'react-apollo';

import { QuerySpeaker } from '../redux/graphql/querys';

class SpeakerPage extends React.Component {
    render( ) {
        console.log( this.props );
        return (
            <div className="ui container">
                <div className="ui grid">
                    <div className="row">
                        Hello
                    </div>
                </div>
            </div>
        )
    }
}

export default graphql(QuerySpeaker, {
     options: ({ url }) => ({ variables: { url } }) <- here is my problem, how can i set this url variable?
})( SpeakerPage );
4

1 に答える 1

18

react-apollo documentationに基づいて、関数に渡される引数はoptions、コンポーネントに渡される props オブジェクトです。コンポーネントをレンダリングするときreact-router、それをparamsprop として渡します。つまりparams、関数に渡されるオブジェクトのプロパティである必要がありoptionsます。

export default graphql(QuerySpeaker, {
  options: (props) => ({ variables: { url: props.match.params.speakerUrl } })
})( SpeakerPage );
于 2016-12-07T23:00:03.593 に答える