私はこのようなRelay Playgroundに(スキーマ内の "テキスト" に "こんにちは")に変更:リレープレイグラウンド - どのように機能するのですか?
SCHEMA:
import {
GraphQLObjectType,
GraphQLSchema,
GraphQLString,
GraphQLInt
} from 'graphql';
const GREETINGS =
{text: 'Hello world 1'}
;
const GreetingsType = new GraphQLObjectType({
name: 'Greetings',
fields:() => ({
text: {type: GraphQLString}
})
});
export default new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields:() => ({
greetings: {
type: GreetingsType,
resolve:() => GREETINGS
}
})
})
});
CODE:
class HelloApp extends React.Component {
render() {
const {hello} = this.props.greetings;
return <h1>test: {hello}</h1>;
}
}
HelloApp = Relay.createContainer(HelloApp, {
fragments: {
greetings:() => Relay.QL`
fragment on Greetings {
text
}
`,
}
});
class HelloRoute extends Relay.Route {
static routeName = 'Hello';
static queries = {
greetings: (Component) => Relay.QL`
query GreetingsQuery {
greetings {
${Component.getFragment('greetings')},
},
}
`,
};
}
ReactDOM.render(
<Relay.RootContainer Component={HelloApp} route={new HelloRoute()} />,
mountNode
);
しかし、それは動作しませんし、エラーメッセージは表示されません。何もレンダリングされません。 「テキスト」を「こんにちは」に戻すと、それは再び機能します。どうして?スキーマがハードコードされているようですか?
EDIT:
これは、(私が理由を知っている)作品:ない作品以下
const {text} = this.props.greetings;
return <h1>test: {text}</h1>;
が、これを(そして、なぜならば、私は知らない。
const sm = this.props.greetings;
return <h1>test: {sm.text}</h1>;
これはあまりにも動作します上記の "テキスト"変数名に特有のものは何ですか?):
const {sm} = this.props.greetings;
return <h1>test: {sm}</h1>;
解決:
ES6機能。中括弧はプロパティを含む必要があります。これがtext
が動作する理由です。ありがとう@ヴィンス寧。あなたのアプリを反応させるので
ありがとうございました。私はそれが働くようになったが、なぜそれが働くのか分からない。編集を参照してください。 –
JS ECMAScript 6には、destructuring(http://www.2ality.com/2015/01/es6-destructuring.html)というテクニックがあります。ここで、中括弧を変数の周りに置くと、自動的にオブジェクトは宣言で割り当てられます。たとえば、 'obj = {first:1、second 2:}'のようなオブジェクトを持っていれば、 'first {second }'というプロパティを' const {first、second} = obj; 'のようにつかむことができます。 '// first == 1'と' second == 2'のところで、コード内で 'first'と' second'に直接アクセスすることができます。それは理にかなっていますか? – vince
私は編集を行います。なぜなら 'var sm = {text:" "}'のように 'sm'を定義するのはなぜですか? –