Javascript 如何使用React路由器传递位置状态和URL参数?
当我点击Javascript 如何使用React路由器传递位置状态和URL参数?,javascript,reactjs,react-router,react-router-dom,Javascript,Reactjs,React Router,React Router Dom,当我点击HoverBooks组件中的链接以进入一个新页面时,我可以在book组件中呈现book位置状态,但当我按下它时,什么也没有发生。我认为错误在路线中: function App() { return ( <div className="App"> <Router> <Switch> <Route path="/book:/book.Key">
HoverBooks
组件中的链接以进入一个新页面时,我可以在book
组件中呈现book
位置状态,但当我按下它时,什么也没有发生。我认为错误在路线中
:
function App() {
return (
<div className="App">
<Router>
<Switch>
<Route path="/book:/book.Key">
<Book />
</Route>
<Route path="/signin">
<Signin />
</Route>
<Route path="/">
<Header />
<Home />
</Route>
</Switch>
</Router>
</div>
)
}
export default App
import React from 'react'
import { useLocation } from 'react-router-dom'
const Book = () => {
const {
state: { book },
} = useLocation()
console.log({ book })
return (
<div key={book.key}>
<h1>{book.bookName}</h1>
</div>
)
}
export default Book
const HoverBooks = ({ ...book }) => {
const [inHoverBooks, setInHoverBooks] = React.useState(false)
return (
<>
<Link
to={{
pathName: `/book/${book.key}`,
state: {
book,
},
}}
>
<img
onMouseLeave={() => setInHoverBooks(false)}
onMouseEnter={() => setInHoverBooks(true)}
src={book.image}
key={book.key}
/>
</Link>
{inHoverBooks && (
<div className="hover__containter">
<h3>{book.bookName}</h3>
<h2>{book.by}</h2>
<h2>{book.Narreted}</h2>
<h2>{book.length}</h2>
<h2>{book.rating}</h2>
</div>
)}
</>
)
}
export default HoverBooks
函数应用程序(){
返回(
)
}
导出默认应用程序
从“React”导入React
从“react router dom”导入{useLocation}
常数书=()=>{
常数{
国家:{book},
}=useLocation()
console.log({book})
返回(
{book.bookName}
)
}
导出默认书本
常数HoverBooks=({…book})=>{
常量[InhorBooks,SetInhorBooks]=React.useState(false)
返回(
{inHoverBooks&&(
{book.bookName}
{book.by}
{book.narreed}
{book.length}
{book.rating}
)}
)
}
导出默认悬停簿
使用react router,您需要像这样将要渲染的组件传递到路由
const ComponentA = (props) => {...}
<Route path="/component-a" component={ComponentA} />
const ComponentA=(props)=>{…}
下面是如何链接到组件a
<Link to="/component-a" >Go to component A</Link>
转到组件A
下面是使用URL参数定义路由的正确形式,例如/:someName
:
<Route path="/book/:bookKey">
<Book />
</Route>
您可以使用和react钩子访问组件中的“URL参数”和“位置状态”:
const Book = () => {
const {
state: { book },
} = useLocation()
const { bookKey } = useParams();
console.log(book, bookKey)
// prints "book" object (from location state) and "bookKey" (from URL params)
return (
<div key={book.key}>
<h1>{book.bookName}</h1>
</div>
)
}
constbook=()=>{
常数{
国家:{book},
}=useLocation()
const{bookKey}=useParams();
console.log(book,bookKey)
//打印“book”对象(来自位置状态)和“bookKey”(来自URL参数)
返回(
{book.bookName}
)
}
我建议您添加到您的ReactJS应用程序。它通过“静态类型检查”帮助您尽早发现错误。不确定this@mura1它的哪一部分?还是一样,我甚至不能在控制台上显示book对象我希望它能工作,或者这个我认为TypeScript是关于“使用”,而不是“学习”。你“使用”TS,你就学会了“JS”。例如:const i=10
是JS,但const i:number=10
是TS。我建议继续学习JS并开始使用TS。检查,您可以在最多学习1天后开始使用它。所以,这并不难。谢谢你,好心的先生
const Book = () => {
const {
state: { book },
} = useLocation()
const { bookKey } = useParams();
console.log(book, bookKey)
// prints "book" object (from location state) and "bookKey" (from URL params)
return (
<div key={book.key}>
<h1>{book.bookName}</h1>
</div>
)
}