Это моя первая попытка использовать Relay Modern. Получение для конкретного пользователя из PostgraphQL GraphQL Server
. Он успешно извлекает данные, но не передает их функции рендеринга:
import {createFragmentContainer, QueryRenderer, graphql} from 'react-relay'
import environment from 'environment'
@CSSModules(styles) export default class Profile extends Component {
render() {
var {props: {children}} = this
return (
<QueryRenderer
environment={environment}
query={graphql`
query ProfileQuery {
userById(id: "f0301eaf-55ad-46db-ac90-b52d6138489e") {
firstName
userName
}
}
`}
render={({error, relayProps}) => {
if (error) {
return <div>{error.message}</div>
} else if (relayProps) {
...
}
return <div>Loading...</div>
}}
/>
)
}
}
Отображается только "Загрузка ...".
Я предполагаю, потому что он успешно извлекает данные, что сервер и среда graphql в порядке.
Я не использую React 16, и в проекте также используется Redux.
Любые предложения относительно того, почему relayProps не имеет значения (например, relayProps.user)?
Еще одна вещь, которая может помочь, среда (файл) находится в главном приложении, а QueryRenderer
и компоненты находятся в импортированном пакете npm (для совместного использования в нескольких приложениях). Как уже упоминалось, запрос работает нормально, поэтому я не думал, что это проблема. Я также запускаю компилятор реле в пакете, но не в основном приложении, поскольку в нем нет компонентов реле.
На всякий случай среда настраивается с использованием:
const {
Environment,
Network,
RecordSource,
Store,
} = require('relay-runtime')
// Instantiate Store for Cached Data
const store = new Store(new RecordSource())
// Create Network for GraphQL Server
const network = Network.create((operation, variables) => {
// GraphQL Endpoint
return fetch(config.gqlapiProtocol + "://" + config.gqlapiHost + config.gqlapiUri + "/a3/graphql" , {
method: 'POST',
headers: {
'Content-Type': "application/json",
'Accept': 'application/json',
},
body: JSON.stringify({
query: operation.text,
variables,
}),
}).then(response => {
return response.json()
})
})
// Instantiate Environment
const environment = new Environment({
network,
store,
})
// Export environment
export default environment
.then(json => { // Allow Relay onError to get fired in case of errors in response // See: https://github.com/facebook/relay/issues/1816 // NOTICE: that data might contain values even when errors present if(json.errors && json.errors.length > 0) { return Promise.reject(json); } return Promise.resolve(json); })
- person hisa_py   schedule 16.10.2017