【发布时间】:2020-03-12 17:51:44
【问题描述】:
在我的应用程序中,我使用 React Router 向我的应用程序添加路由。一旦用户单击保存,我将使用 withRouter history 从我的 AddAlbum 类组件重定向到我的主页(提要)页面。我的问题是我的 AddAlbum 组件正在更新我的主页,因此我需要在重定向后重新加载我的主页以查看我的 AddAlbum 组件所做的更改。我将如何做到这一点?
这是我的路由在我的 App.js 组件中的样子:
import { BrowserRouter, Router, Route } from "react-router-dom";
return (
<BrowserRouter>
<div className="App">
<Router history={history}>
<Route path="/album/create" component={AddAlbum}/>
<Route exact path="/feed" component={Feed}/>
</Router>
</div>
</BrowserRouter>
);
AddAlbum 和 home(Feed) 都是类组件。
在我的 AddAlbum 组件中,我在 onClick 方法中使用 withRouter 和 history 进行重定向。这是按钮的完整功能(重定向到最后一个.then():)
this.onClick = this.onClick.bind(this);
this.save2 = this.save2.bind(this);
save2(event) {
event.preventDefault();
let user_id;
let image;
let data;
const { history } = this.props;
Promise.resolve().then(()=>{
user_id = this.context.user.sub;
image = this.state.file;
data = new FormData()
data.append('file', this.state.file)
}).then(()=> {
this.setState(prevState => ({
files: prevState.files.map((file, index) => ({...file, index})
)}));
let files = this.state.files;
this.setState(prevState => ({
albums: {...prevState.albums, files, user_id}
}))
Array.from(this.state.songsList).forEach(song => {
data.append('songs', song)
})
data.append('albums', JSON.stringify(this.state.albums))
}).then(()=> {
axios.post("http://localhost:3000/albums", data, {
}).then(res => { // then print response status
console.log(res.statusText)
})
})
.then(()=> {
const { match, location, history } = this.props;
history.push('/feed');
})
.catch((err)=> {console.log(err)});
}
onClick(event) {
let albums = this.state.albums;
if(albums.date === "" || albums.title === "" || albums.description === "") {
alert("ERROR: Fields Must Be Filled In Before You Save");
} else {
this.save2(event);
}
}
render() {
return(
<ButtonToggle onClick={this.onClick} color="success">
Save
</ButtonToggle>
)
}
重定向到主页(Feed)组件后,如何重新加载它?
【问题讨论】:
-
你在使用某种全局状态吗?因为在每次路由更改时,您的组件都应该再次渲染。没有任何旧值。
-
@JeanAguilar 全局状态是什么意思,在哪里?如果我单击带有 React Router 的链接,我认为它不应该重新加载。不知道我是否使用 withRouter 进行重定向。
-
重定向工作正常,对吧?
-
是的,重定向工作正常
-
请添加更多 AddAlbum 组件的代码。特别是保存按钮部分。
标签: javascript reactjs