因此,我一直在构建一个React应用程序,并且一直面临着在刷新时组件消失的类似问题,更确切地说,它与react路由器有关,我肯定使用它不正确。
App.js看起来像
import React from "react";
import "./App.css";
import { Home } from "./components/home";
function App() {
return <Home />;
}
export default App家庭组件
export class Home extends Component {
render() {
return (
<BrowserRouter>
<NavigationBar />
<Switch>
<Route path="/jobPortal" component={JobPortal} />
</Switch>
</BrowserRouter>
);
}普通海军
const NavigationBar = ({ userType }) => {
return (
<Navbar style={globalStyles.container} bg="dark" variant="dark">
<Navbar.Brand style={globalStyles.container} href="/">
Soffice
</Navbar.Brand>
<Nav className="ml-auto">
<Nav.Link as={NavLink} to="/JobPortal">
Job Portal
</Nav.Link>
{userType && (
<Nav.Link as={NavLink} to="/logout">
Log Out
</Nav.Link>
)}
{!userType && (
<React.Fragment>
<Nav.Link as={NavLink} to="/SignUp">
Sign Up
</Nav.Link>
<Nav.Link as={NavLink} to="/SignIn">
Sign In
</Nav.Link>
</React.Fragment>
)}
</Nav>
</Navbar>
);
};出口违约NavigationBar;
当我们访问jobPortal时出现的jobPortal
const NavigationBar = ({ url }) => {
// let {url,url} =useRouteMatch();
console.log(url);
return (
<Navbar style={{ ...globalStyles.container }} bg="info" variant="dark">
<Nav className="mx-auto">
<Nav.Link style={styles.navBarColor} as={NavLink} to="/JobPortal">
Home
</Nav.Link>
<Nav.Link style={styles.navBarColor} as={NavLink} to={`${url}/Post`}>
Post Job
</Nav.Link>
<Nav.Link style={styles.navBarColor} as={NavLink} to={`${url}/Want`}>
Want Job
</Nav.Link>
<Nav.Link style={styles.navBarColor} as={NavLink} to={`${url}/Contact`}>
Contact
</Nav.Link>
</Nav>
</Navbar>
);
};
const styles = {
navBarColor: {
color: "white",
fontSize: 22
}
};
export default NavigationBar;JobPortal组件
export class JobPortal extends Component {
componentDidMount() {
console.log("path", this.props.match.url);
}
render() {
const path = this.props.match.path;
return (
<BrowserRouter>
<NavigationBar url={this.props.match.url} />
<Switch>
<Route path={`${path}/Want`} component={Want} />
</Switch>
</BrowserRouter>
);
}
}想要组件
class Want extends Component {
constructor(props) {
super(props);
this.state = {
name: "",
email: "",
message: "",
jobs: [
{
jobId: 1,
jobTitle: "software"
}
]
};
}
handleClick() {
console.log(this.state);
}
componentWillMount() {
this.url = this.props.location.pathname;
console.log("location", this.props.location.pathname);
}
render() {
const styles = {
card: {
width: "14em",
height: "100%",
fontSize: 20,
padding: 10
}
};
return (
<BrowserRouter>
<Route path={`${this.url}/:jobId`} component={Job} />
<Container>
<Container></Container>
<Container>
<Row>
{this.state.jobs.map((job, index) => (
<Col style={{ padding: 20 }}>
<Card text="white" bg="dark" style={styles.card}>
<Card.Body>
<Card.Title>
<Link to={`${this.url}/${job.jobId}`}>
{job.jobTitle}
</Link>
</Card.Title>
</Card.Body>
</Card>
</Col>
))}
</Row>
</Container>
</Container>
</BrowserRouter>
);
}
}
export default Want;正在消失的作业组件
export class Job extends Component {
render() {
return <p>this will disappear</p>;
}
}完整代码沙箱链接
https://codesandbox.io/s/mystifying-yalow-6jcyn?fontsize=14&hidenavigation=1&theme=dark
当我单击软件链接时,卡片应该会消失,但它不是图像,但到目前为止,作业组件显示得很好,但当我刷新页面时,作业组件就消失了,单击软件链接以奇怪的方式扩展url。组件显示器
发布于 2020-02-21 14:25:03
这是因为want.js中的这一行
<Route path={`${this.props.location.pathname}/:jobId`} component={Job} />每次重新加载浏览器时,它都会将ID添加到路径名/JobPortal/Want/1的末尾,即/JobPortal/Want/1/1,/JobPortal/Want/1/1/1,因此您不断地更改与路由匹配的路径。
只要把它改成
<Route path={`${this.props.match.path}/:jobId`} component={Job} />我还将更加明确地显示您的链接,因为它在每次单击时都会将自己复制到路径上:
<Link to={`/JobPortal/Want/${job.jobId}`}>
{job.jobTitle}
</Link>在像这样使用this.props.location.pathname params时,要小心,因为它包含了
https://stackoverflow.com/questions/60324668
复制相似问题