首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用onClick事件返回页面刷新页面不存在

使用onClick事件返回页面刷新页面不存在
EN

Stack Overflow用户
提问于 2019-12-08 23:44:12
回答 1查看 118关注 0票数 0

我有一个帖子列表,当用户点击标题时,他应该通过使用帖子id作为url导航到当前帖子。我的Link确实更改了url,但它不会更新页面,用户也不会被重定向,所以我尝试挂接一个也会刷新页面的onClick事件,但当我这样做时,url不再是帖子的id,并且我得到一个404,表明该页面不存在。用户点击Link后,如何成功刷新页面?

下面是我的父组件:

代码语言:javascript
运行
复制
import React, { Component }  from 'react'
import { NavLink, Route, BrowserRouter } from 'react-router-dom';
import Planets from '../Planets/Planets.jsx';
import Signs from '../Signs/Signs.jsx';
import PlanetaryAspects from '../PlanetaryAspects/PlanetaryAspects.jsx';
import Houses from '../Houses/Houses.jsx';

class BlogCategoriesMenu extends Component {


  render() {
    return(
        <div className="blog-categories-menu">
        <BrowserRouter>
        <div className="blog-categories-menu__items">
         <NavLink to="/planets" className="blog-categories-menu__items-a"  activeClassName="isActive">Planets</NavLink>
         <NavLink to="/signs" className="blog-categories-menu__items-a" activeClassName="isActive">Signs</NavLink>
         <NavLink to="/planetary-aspects"  className="blog-categories-menu__items-a" activeClassName="isActive">Planetary Aspects</NavLink>
         <NavLink to="/houses"  className="blog-categories-menu__items-a" activeClassName="isActive">Houses</NavLink>
         <div className="content-container">
         <Route path="/planets" component={Planets}></Route>
         <Route path="/signs" component={Signs}></Route>
         <Route path="/planetary-aspects" component={PlanetaryAspects}></Route>
         <Route path="/houses" component={Houses}></Route>
         </div>
         </div>
        </BrowserRouter>
       </div>

    )
  }
} 

export default BlogCategoriesMenu;

以下是用户单击的组件:

代码语言:javascript
运行
复制
import React, { Component  }  from 'react'
import axios from 'axios';
import Spinner from '../Spinner/Spinner';
import { Link, Switch } from 'react-router-dom';

class Planets extends Component {
    state = {
        posts: [],
        currentPage: 1,
        setCurrentPage: 1,
        postsPerPage: 5,
        loading: false
      }

      componentDidMount() {
        const fetchPosts = async () => {
            this.setState({...this.state, loading: true});
            const res = await axios.get('https://app-endpoint/');
            this.setState({...this.state, posts: res.data, loading: false});
          };
          fetchPosts();
        }

        reloadPage = () => {
         window.location.reload()
        }

  render() {
    const retrogradesPosts = this.state.posts.filter( (item) => {
        return item.categories === 'retrogrades'
      })

      if(this.state.loading) {
        return <Spinner/>
      }
        return(
            <div className="planet-articles-container">
           <div className="">
          <div className="">
          {retrogradesPosts.map(post => (
          <div key={post._id} className="planet-articles-container__post">
          <img className="planet-articles-container__post-img" src={post.picture} alt="avatar"/>
          <div className="">
          <div className="">
           <h2 className="">{post.date}</h2>
            <Link to={`/post/${post._id}`} onClick={this.reloadPage}> <p className="">{post.title}</p></Link>
           <p className="planet-articles-container__post-text">{post.postContent.substring(0, 100) + "..."}</p>
        </div>
        </div>
      </div>
          ))}
            </div>
         </div>
           </div>
        )
  }
} 

export default Planets;

和我的App.js:

代码语言:javascript
运行
复制
import React from 'react';
import { BrowserRouter, Route, Switch} from 'react-router-dom';
import Home from './components/Home/Home.jsx'
import Error from './components/Error/Error.jsx';
import Blog from './components//Blog//Blog.jsx';
import Post from './components/Post/Post.jsx';

const App = () => {

  return (
   <BrowserRouter>
   <Switch>
   <Route path="/" component={Home} exact />
   <Route path="/blog" component={Blog} exact/>
   <Route path="/post/:id" component={Post} exact/>
   <Route component={Error}/>
   </Switch>
   </BrowserRouter>
  );
};

export default App;
EN

回答 1

Stack Overflow用户

发布于 2019-12-09 01:17:47

BlogCatergoriesMenu是使用/blog呈现的吗?如果BlogCatergoriesMenu是在应用程序内部呈现的,并且此“应用程序组件”是由BrowserRouter包装的,则删除BlogCatergoriesMenu中的BrowserRouter以使其工作。更新后的BlogCatergoriesMenu将如下所示

代码语言:javascript
运行
复制
import React, { Component }  from 'react'
import { NavLink, Route } from 'react-router-dom';
import Planets from '../Planets/Planets.jsx';
import Signs from '../Signs/Signs.jsx';
import PlanetaryAspects from '../PlanetaryAspects/PlanetaryAspects.jsx';
import Houses from '../Houses/Houses.jsx';

class BlogCategoriesMenu extends Component {


  render() {
    return(
        <div className="blog-categories-menu">
        <div className="blog-categories-menu__items">
         <NavLink to="/planets" className="blog-categories-menu__items-a"  activeClassName="isActive">Planets</NavLink>
         <NavLink to="/signs" className="blog-categories-menu__items-a" activeClassName="isActive">Signs</NavLink>
         <NavLink to="/planetary-aspects"  className="blog-categories-menu__items-a" activeClassName="isActive">Planetary Aspects</NavLink>
         <NavLink to="/houses"  className="blog-categories-menu__items-a" activeClassName="isActive">Houses</NavLink>
         <div className="content-container">
         <Route path="/planets" component={Planets}></Route>
         <Route path="/signs" component={Signs}></Route>
         <Route path="/planetary-aspects" component={PlanetaryAspects}></Route>
         <Route path="/houses" component={Houses}></Route>
         </div>
         </div>
       </div>

    )
  }
} 

export default BlogCategoriesMenu;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59237072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档