Реле fetchQuery не работает после history.push НО работает нормально при ручном обновлении - PullRequest
0 голосов
/ 13 апреля 2019

Я занимаюсь разработкой приложенияact-relay-graphql с функцией authenticaton и хочу показать количество новых сообщений в компоненте Header (навигация). Вот Login Код компонента:

...

LoginMutation(username, password)
            .then((resp) => {
                if (resp.token) {
                    this._saveUserData(resp.expiredAt, resp.token)
                    fetchQuery(environment, query, {})
                        .then(data => {
                            const me = data.user.me;
                            this.setState({
                                Auth: {
                                    user: {
                                        fullName: me.fullName,
                                        username: me.username,
                                        isSeniorUser: me.isSeniorUser
                                    }
                                }
                            })
                            this.props.setUser(this.state.Auth.user)  // Redux
                            this.props.history.replace('/dashboard')
                        });
                }
            })

_saveUserData = (expiredAt, token) => {
    localStorage.setItem(GC_USER_EXPIRES_AT, expiredAt)
    localStorage.setItem(GC_AUTH_TOKEN, token)
}

...

А вот и Header Компонент (внутри Dashboard Компонент)

class Header extends Component {

    componentDidMount() {
        this.getMessagesCount()
    }

    getMessagesCount() {
        fetchQuery(environment, NewMessagesQuery, {})
            .then(data => {
                const newMessagesCount = data.message != null ? data.message.countNewMessages.newMessages : '';
                this.props.setNewMessagesCount(newMessagesCount) // Redux
            });
    }

    render() {
        return (
            <>
                {this.props.newMessages}
            </>
        )
    }
}

Проблема в после History.push показывает, что приборная панель, НО fetchQuery даже не запускается и возвращает data = {messages: null}, но когда страница обновляется вручную, она работает и возвращается число новых сообщений.

1 Ответ

0 голосов
/ 02 мая 2019

Я понял это. В случае, если кто-то пришел к этой проблеме, мой Конфигурация кэша в Environment.js была неправильной. Поэтому он пытался читать данные из кэша для каждого запроса.

...