У меня есть два компонента, как показано ниже
SongList.js
import React, { Component } from 'react';
import gql from 'graphql-tag';
import { graphql } from 'react-apollo';
import { Link } from 'react-router';
class SongList extends Component {
renderSongs() {
return this.props.data.songs.map(song => {
return (
<li key={song.id} className="collection-item">
{song.title}
</li>
);
});
}
render() {
if (this.props.data.loading) {
return <div>Loading...</div>;
}
return (
<div>
<ul className="collection">
{this.renderSongs()}
</ul>
<Link
to="/songs/new"
className="btn-floating btn-large red right"
>
<i className="material-icons">add</i>
</Link>
</div>
);
}
}
const query = gql`
{
songs {
id,
title
}
}
`;
export default graphql(query)(SongList);
SongCreate.js
import React, { Component } from 'react';
import gql from 'graphql-tag';
import { graphql } from 'react-apollo';
import { Link, hashHistory } from 'react-router';
class SongCreate extends Component {
constructor(props) {
super(props);
this.state = { title: '' }
}
onSubmit(event) {
event.preventDefault();
this.props.mutate({
variables: {
title: this.state.title
}
}).then(() => hashHistory.push('/'));
// .catch((err) => console.log('DEBUG::err', err));
}
render() {
return (
<div>
<Link to="/">
Back
</Link>
<h3>Create a New Song</h3>
<form onSubmit={this.onSubmit.bind(this)}>
<label>Song Title: </label>
<input
onChange={event => this.setState({ title: event.target.value })}
value={this.state.title}
/>
</form>
</div>
);
}
}
const mutation = gql`
mutation AddSong($title: String){
addSong(title: $title) {
title
}
}
`;
export default graphql(mutation)(SongCreate);
В основном ситуация, с которой я сталкиваюсь, заключается в том, что в компоненте SongCreate
после успешного изменения метода addSong
он вернется к SongList
, однако я не вижу новую песню на SongList
, ичтобы я это увидел, мне нужно обновить страницу.Мне кажется, что запрос на SongList
не вызывается?