Relay Modern'de bir refetchContainer ayarlayarak bazı sorunlar yaşıyorum. Bir ana bileşen, bir alt sorguyu çalıştıran ve alt öğe bileşeninin uygun şekilde oluşturduğu QueryRenderer'dır (a-prop-riately? Eh? Eh ?!). RefetchContainer tüm değişkenlerimizi belirtir ve bir giriş alanının onChange olayı üzerinde yeni değişkenlerle bir sorguyu yeniden çalıştırır. Tüm bunlar mükemmel çalışır, ancak çocuğun sahne alanı yeni alınan verilerle asla güncellenmez. Relay mağazasını açabilir ve sorgunun gerçekten uygun verilerle alındığını görebilirim. Bir süredir başımı çarptım ve biraz yardımın için minnettarım. Muhtemelen basit bir şey eksik. Ve Lord Relay'i biliyor Modern dokümantasyon seyrek.Relay Modern RefetchContainer öğeleri, bileşene aktarılmadı
Etrafımda dolandım ve uygun bir çözüm bulamıyorum. createRefetchContainer ile
import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { graphql, QueryRenderer } from 'react-relay';
import Search from './Search';
const propTypes = {
auth: PropTypes.object.isRequired,
};
class SearchContainer extends Component {
render() {
return (
<QueryRenderer
query={graphql`
query SearchContainerQuery($search: String!){
users: searchUsers(search:$search, first:10){
...Search_users
}
}`}
variables={{ search: 'someDefaultSearch' }}
environment={this.props.auth.environment}
render={({ error, props }) => {
if (error) {
console.log(error);
}
if (props) {
return <Search users={props.users} />;
}
return <div>No Dice</div>;
}}
/>
);
}
}
SearchContainer.propTypes = propTypes;
export default connect(state => ({ auth: state.auth }))(SearchContainer);
çocuk bileşeni: QueryRenderer ile relay refetch doesn't show the result
ebeveyn bileşeni: Bu adam benzer bir sorun yaşıyor gibi görünüyor
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { createRefetchContainer, graphql } from 'react-relay';
const propTypes = {
relay: PropTypes.object.isRequired,
users: PropTypes.object,
};
const defaultProps = {
users: {},
};
class Search extends Component {
render() {
return (
<div>
<input
type="text"
onChange={(e) => {
e.preventDefault();
this.props.relay.refetch({
search: e.target.value,
});
}}
/>
<ul>
{this.props.users.nodes.map(user =>
<li key={user.id}>{user.username}</li>,
)}
</ul>
</div>
);
}
}
Search.propTypes = propTypes;
Search.defaultProps = defaultProps;
export default createRefetchContainer(
Search,
{
users: graphql.experimental`
fragment Search_users on SearchUsersConnection
@argumentDefinitions(
search: {type: "String", defaultValue: ""}
) {
nodes {
id
displayName
username
}
}
`,
},
graphql.experimental`
query SearchRefetchQuery($search: String!) {
users: searchUsers(search:$search, first:10){
...Search_users @arguments(search: $search)
}
}
`,
);
GraphQL şuna benzer:
# A connection to a list of `User` values.
type SearchUsersConnection {
# Information to aid in pagination.
pageInfo: PageInfo!
# The count of *all* `User` you could get from the connection.
totalCount: Int
# A list of edges which contains the `User` and cursor to aid in pagination.
edges: [SearchUsersEdge]
# A list of `User` objects.
nodes: [User]
}
Ağ c alls uygun şekilde yapılır ve veri beklendiği gibi döndürülür. NetworkCalls
Bu @arguments direktif burada tekrar getirin sorgunun dışında bırakılabilir görünüyor:
query SearchRefetchQuery($search: String!) {
users: searchUsers(search:$search, first:10){
...Search_users @arguments(search: $search)
}
}
Ben @arguments ekleyerek denedim
(hiçbir etkiye sahip görünmektedir kaldırma) Buradaki tavsiyelere göre ana bileşenin parçasına ilişkin direktif: Pass variables to fragment container in relay modern, hiçbir etkisi yoktur.
Üzgünüm fazla yardım .. fwiw RefetchContainers'ı, işi tamamlayan QueryRenderer'a yeni sahne almak için tamamen reddediyorum. örnek: https://github.com/NCI-GDC/portal-ui/blob/next/src/packages/@ncigdc/modern_components/GenesTable/GenesTable.relay.js – azium
@azium Evet, bu iyi çalışıyor gibi görünüyor. Sadece, özellikle bunun için tasarlanan refetchContainer'ın kurulumu çok zor olduğu beni rahatsız ediyor! – cntrlz
Ben tam olarak aynı sorunu yaşıyorum ve ben kafamı duvarda becermeye başladım :( –