Я новичок в Redux.Я начал свое путешествие вчера.Вероятно, это действительно базовый вопрос, который я не могу решить.
Я хочу обновить свой взгляд при нажатии кнопки сортировки.Когда я регистрируюсь (this.props.albums), он обновляется, но только в console.log.Вид не обновляется.
Вот функция fetchAlbums, которую я использую для размещения данных.this.props.albums - это данные, которые я использую для сортировки и обновления.Как видите, я использую console.log (this.props.albums), и он отсортирован.Но мое представление о реакции не обновляется.
class AlbumSearchContainer extends Component {
state = {
albumInput: '',
};
searchForAlbums = async event => {
event.preventDefault();
const albumName = this.state.albumInput;
const api_call = await fetch(
`https://api.spotify.com/v1/search?q=album%3A${albumName}&type=album`,
{
headers: { Authorization: `Bearer ${accessToken}` },
}
);
const data = await api_call.json();
this.props.fetchAlbums(data.albums.items);
this.setState({ albumInput: '' });
};
handleChange = event => {
this.setState({ albumInput: event.target.value });
};
render() {
let albumsList = [];
if (this.props.albums.length > 0) {
albumsList = this.props.albums.map(element => (
<AlbumComponent
key={element.id}
name={element.name}
image={element.images[1].url}
artist={element.artists[0].name}
release_date={element.release_date}
total_tracks={element.total_tracks}
id={element.id}
href={element.href}
/>
));
}
return (
<div className="App">
<Jumbotron style={{ backgroundColor: '#1ED760' }}>
<h1>Search using Album Name</h1>
<SearchingForm
searchForAlbums={this.searchForAlbums}
onChange={this.handleChange}
value={this.state.albumInput}
/>
{this.props.albums.length > 1 ? (
<div>
<p>
<button
className="sortButton"
onClick={() => {
this.props.sortAlpha(this.props.albums);
console.log(this.props.albums);
}}
>
Sort Alpha
</button>
<button
className="sortButton"
onClick={() => {
this.props.fetchAlbums(
this.props.albums.sort((a, b) => {
return (
new Date(b.release_date) - new Date(a.release_date)
);
})
);
console.log(this.props.albums);
}}
>
Sort by date
</button>
</p>
</div>
) : (
console.log()
)}
</Jumbotron>
<div className="albumContainer"> {albumsList}</div>
</div>
);
}
}
const mapStateToProps = state => ({
albums: state.albums,
});
const mapActionsToProps = dispatch => {
return {
fetchAlbums: albums => dispatch({ type: 'FETCH_ALBUMS', payload: albums }),
sortAlpha: albums =>
dispatch({ type: 'SORT_ALBUMS_ALPHA', payload: albums }),
};
};
export default connect(
mapStateToProps,
mapActionsToProps
)(AlbumSearchContainer);
Я просто хочу обновить свое представление по нажатию кнопок сортировки.
// редактировать, когда я начинаю набирать в свой albumInput, оно обновляется.Но это не освежает при нажатии кнопок.