React Hooks中使用onClick传递数据的方法
P粉615886660
P粉615886660 2023-08-31 13:43:40
[React讨论组]
<p>点击blogItem时,我如何将数据从<code>blogItem.js</code>组件传递到<code>blogDetails.js</code>组件?然而,blogItem组件是在Home.js组件中导入的。请问我应该在哪里添加点击动作?有人能分享一个例子吗?</p> <p>CodeSandboX链接 https://codesandbox.io/s/gallant-water-5bmueq?file=/src/blogItem.js:0-1876</p> <pre class="brush:php;toolbar:false;">// App.js import { BrowserRouter, Route, Routes, Switch } from &quot;react-router-dom&quot;; import Home from &quot;./src/Home&quot;; import BlogItem from &quot;./src/blogItem&quot;; function App() { return ( &lt;div className=&quot;App&quot;&gt; &lt;BrowserRouter&gt; &lt;Routes&gt; &lt;Route path=&quot;/&quot; element={&lt;Home /&gt;}&gt;&lt;/Route&gt; &lt;Route path=&quot;/blogItem&quot; element={&lt;BlogItem /&gt;}&gt;&lt;/Route&gt; &lt;/Routes&gt; &lt;/BrowserRouter&gt; &lt;/div&gt; ); } export default App; //Home.js import &quot;./styles.css&quot;; import React, { useState, useEffect, useCallback } from &quot;react&quot;; import BlogItem from &quot;./blogItem&quot;; const Home = (props) =&gt; { const [blogItem, setBlogItem] = useState(props); useEffect(() =&gt; { setBlogItem(props); }, [props]); return ( &lt;div id=&quot;App&quot;&gt; &lt;BlogItem /&gt; &lt;/div&gt; ); }; export default Home; // BlogItem.js import &quot;./styles.css&quot;; import React, { useState, useEffect, useCallback } from &quot;react&quot;; const blogData = [ { id: 1, date: &quot;25 Jan 2023&quot;, photo: &quot;https://picsum.photos/80&quot;, heading: &quot;Cypress setup blog&quot;, blogDetails: &quot;Best heading added here. The most relevant data added here. Greatest of all time. Wont be a good idea play here always.&quot; }, { id: 2, date: &quot;22 Jan 2022&quot;, photo: &quot;https://picsum.photos/80&quot;, heading: &quot;React state details&quot;, blogDetails: &quot;Best heading added here. The most relevant data added here. Greatest of all time. Wont be a good idea play here always.&quot; } ]; const BlogItem = ({ id, date, photo, heading, blogDetails }) =&gt; { const [searchResults, setSearchResults] = useState(blogData); const [state, setState] = useState({ id, date, photo, heading, blogDetails }); const Columns = () =&gt; ( &lt;div className=&quot;blogItems&quot;&gt; &lt;div className=&quot;row&quot;&gt; &lt;div className=&quot;blogArea&quot;&gt; {searchResults.map(({ id, date, photo, heading, blogDetails }) =&gt; ( &lt;a key={id}&gt; &lt;div className=&quot;blogImageSection&quot;&gt; &lt;img alt=&quot;id&quot; src={photo} /&gt; &lt;div key={id} className=&quot;dataArea&quot;&gt; &lt;span className=&quot;dataDate&quot;&gt;{date}&lt;/span&gt; &lt;span className=&quot;tags&quot;&gt;cypress&lt;/span&gt; &lt;h3&gt;{heading}&lt;/h3&gt; &lt;p&gt; Best heading added here. The most relevant data added here. Greatest of all time. Wont be a good idea play here always. &lt;/p&gt; &lt;a href=&quot;_blank&quot; className=&quot;readmoreLink&quot;&gt; Read more → &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; ))} &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; ); return &lt;Columns {...state} /&gt;; }; export default BlogItem;</pre> <p>// BlogDetails.js</p> <pre class="brush:php;toolbar:false;">import React from &quot;react&quot;; const BlogDetails = () =&gt; { return ( &lt;div id=&quot;App&quot;&gt; &lt;div className=&quot;blogDetailsSection&quot;&gt; &lt;div className=&quot;row&quot;&gt; &lt;div className=&quot;individual-blogs&quot;&gt; &lt;h2&gt;ddd&lt;/h2&gt; &lt;p&gt;Blog details&lt;/p&gt; &lt;pre&gt; &lt;code&gt;const data = []; data.push(&quot;soccer&quot;);&lt;/code&gt; &lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; ); }; export default BlogDetails;</pre></p>
P粉615886660
P粉615886660

全部回复(1)
P粉043566314

首先,在index.js文件中创建browserRouter,并从app.js文件中移除它,并为BlogDetails component创建一个Route

<BrowserRouter>
  <Routes>
      <Route path="/" element={<Home />}></Route>
      <Route path="/blogItem" element={<BlogItem />}></Route>
      <Route path="/blogDetails" element={<BlogDetails />}></Route>
   </Routes>
</BrowserRouter>

然后你需要安装'react-router-dom'包。

npm i react-router-dom

BlogItem.js文件中导入useNavigate

import { useNavigate } from "react-router-dom";
const navigate = useNavigate(); // 在函数组件内部使用

现在你可以给你想要点击的element添加onClick,以便重定向到/blogDetails,例如:

<div className="blogImageSection"
onClick={() =>
  navigate('blogDetails', { state: {id, date, photo, heading, blogDetails } }) // 这是如何使用useNavigate传递数据的方法
}> ... </div>

最后,在BlogDetails.js文件中:

import { useLocation } from "react-router-dom";
const location = useLocation(); // 在函数组件内部使用

你可以像这样访问传递的数据:

const myRecievedData = location.state
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号