私はRelayを使い始めており、私のルーティングが正しく機能するようにしています。 残念ながら、私は運があまりありません。ここでリレーとリアクションルーティングを正しく動作させるには?
は、私が取得していますエラーです。ここ
Uncaught TypeError: Component.getFragment is not a function
はあなたの参考のために私が持っているコードです:app.jsx
index.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import Relay from 'react-relay';
import {Router, Route, IndexRoute, browserHistory} from 'react-router';
import {RelayRouter} from 'react-router-relay';
import App from './modules/app';
import Home from './modules/home';
const AppQueries = {
store: (Component) => Relay.QL `query {
store {
${Component.getFragment('store')}
}
}`
};
ReactDOM.render(
<RelayRouter history={browserHistory}>
<Route path='/' component={App} queries={AppQueries}>
<IndexRoute component={Home}/>
</Route>
</RelayRouter>,
document.getElementById('ch-root'));
import React, {Component} from 'react';
import Relay from 'react-relay';
import Header from './ui/header';
import Footer from './ui/footer';
class App extends Component {
render() {
return (
<div id="ch-container">
<Header/>
<section id="ch-body">
{this.props.children}
</section>
<Footer/>
</div>
);
}
}
App = Relay.createContainer(App, {
fragments: {
store: (Component) => Relay.QL `
fragment on Store {
${Component.getFragment('store')}
}
`
}
});
export default App;
home.jsx
import React, {Component} from 'react';
import Relay from 'react-relay';
import Loader from './ui/loader';
import AccountSelector from './account/account-selector';
const APP_HOST = window.CH_APP_HOST;
const CURR_HOST = `${window.location.protocol}//${window.location.host}`;
class Home extends Component {
state = {
activeAccount: null,
loading: true
}
render() {
const {activeAccount, loading} = this.state;
if (loading) {
return <Loader/>;
}
if (!activeAccount && !loading) {
return <AccountSelector/>;
}
return (
<h1>Hello!</h1>
);
}
}
Home = Relay.createContainer(Home, {
fragments: {
store:() => Relay.QL `
fragment on Store {
accounts {
unique_id,
subdomain
}
}
`
}
});
export default Home;
UPDATE
私は以下のようにfreiksenet
によって提案されたいくつかの変更を加えました。しかし、それは次の2つの問題を提起:私はルートを変更し、Home
以外の成分がApp
コンポーネントによってレンダリングされるとき
- どうなるでしょうか?
- 私は今、このエラーが発生します。ここでは
Warning: RelayContainer: Expected prop
store
to be supplied toHome
, but gotundefined
. Pass an explicitnull
if this is intentional.
は変更されている:
index.jsx
const AppQueries = {
store:() => Relay.QL `query {
store
}`
};
app.jsx
import Home from "./home";
...
App = Relay.createContainer(App, {
fragments: {
store:() => Relay.QL `
fragment on Store {
${Home.getFragment('store')}
}
`
}
});
エラーは、「コンポーネント」が何であるかを知らないという意味です。あなたは 'App'と' Home'をどのようにインポートしたのかと同様にインポートする必要があります。私は 'index'ファイルにエラーが生成されたと仮定していますか? – Chris
@Moonあなたの更新1への応答: 質問2:あなたは 'Home'コンポーネントのためのクエリを渡しませんでした。 index.jsxファイルで、 ' 'を クエリ= {AppQueries} 'に変更します。 質問1:@freiksenetはすでに言及しているように、 'App'はコンテナである必要はありません。 'App'によってレンダリングされた他のコンポーネントは、必要なフラグメントを定義する必要があります。 –