#javascript #reactjs #asynchronous #fetch
#javascript #ajax #reactjs
Вопрос:
Я новичок в React JS, у меня есть этот код, который создает app
div с некоторыми MusicPlayer
элементами тегов:
class App extends React.Component {
render() {
return (
<div id="app">
<MusicPlayer
id="2"
visualizerType="RIPPLES"
theme={darkTheme}
trackInfo={{
title: "Imitosis",
artist: "Andrew Bird",
album: "Armchair Apocrypha"
}}
trackUrl="https://s3-us-west-2.amazonaws.com/teddarcuri.monarch/Andrew Bird - Imitosis.mp3"
albumArt="https://s3-us-west-2.amazonaws.com/teddarcuri.monarch/andrew bird.jpg"
utilities={true}>
</MusicPlayer>
</div>
)
}
}
ReactDOM.render(
<App />,
document.getElementById("app")
);
Обновить
Допустим, я хочу заменить <MusicPlayer>
на this:
<MusicPlayer
id="3"
visualizerType="RIPPLES"
theme={lightTheme}
trackInfo={{
title: "Guns amp; Dogs",
artist: "Portugal, The Man",
album: "The Satanic Satanist"
}}
trackUrl="https://s3-us-west-2.amazonaws.com/teddarcuri.monarch/Portugal. The Man - Guns & Dogs - The Satanic Satanist.mp3"
albumArt="http://ecx.images-amazon.com/images/I/61X7CiBpZ6L.jpg"
utilities={true}>
</MusicPlayer>
Как это можно сделать с помощью Ajax?
Комментарии:
1. Можете ли вы уточнить?
2. @PraneshRavi Мне нужно понять, как я могу удалить музыкальный проигрыватель и добавить новый через post Ajax. Мне непонятно, как я могу продолжить после рендеринга.
3. Что означает новый ? Другой музыкальный проигрыватель?
4. @PraneshRavi Да, MusicPlayer — это карта музыкального проигрывателя, и я хотел бы изменить ее по щелчку мыши
5. Изменить на что именно?
Ответ №1:
Используйте React state
и setState
для повторного отображения компонента с новыми данными. Вызовите setState
внутри успешного обратного вызова ajax и передайте новые данные setState
. Это приведет к отображению MusicPlayer
с новыми данными.
Надеюсь, это поможет!
Псевдокод
class App extends React.Component {
constructor(props){
super(props)
this.state = { //initial empty details
details : {}
}
}
componentDidMount(){
//place the ajax call where ever you need
$.ajax() //call ajax
.done((data) => {
this.setState({ //this setState will re render the UI with the new state
details: { //change the key value pairs as needed
id: data.id,
trackInfo: {
title: data.title,
artist: data.artist,
album: data.album,
},
trackUrl: data.trackUrl,
albumArt: data.albumArt,
}
})
})
}
render() {
if(!this.state.details.id) return false //renders nothing when no details available
return (
<div id="app">
<MusicPlayer
id={this.state.details.id}
visualizerType="RIPPLES"
theme={darkTheme}
trackInfo={this.state.details.trackInfo}
trackUrl={this.state.details.trackUrl}
albumArt={this.state.details.albumArt}
utilities={true}>
</MusicPlayer>
</div>
)
}
}
Ps. Частотные полосы выглядят лучше, чем частотные колебания: P
Комментарии:
1. @SimonLeCat Никаких проблем. Мне очень понравились полосы частот. Удачи с этим!
2. Я думаю, что есть проблема с вашим кодом (неизвестно: неожиданный токен), пожалуйста, дважды проверьте
details = {}
3. @SimonLeCat Это хороший вопрос. api.jquery.com/jquery.ajax это должно помочь вам понять jQuery. Если вам нужна дополнительная помощь, вы можете задать новый вопрос с тегом jQuery.
4. ДА. JSON, содержащий всю необходимую информацию