将数据传递给另一个组件 OnClick
Passing Data to Another Component OnClick
因此,我在路由和管理数据方面遇到了一些问题。
Listing
组件本质上是一大堆卡片,其中包含我从我的要点中获取的电影数据。我使用 .map
为每张卡片创建了一个组件,并将值添加到 prop.
我的目标: 当我点击任何卡片的按钮时,我想转到一个页面并动态访问该电影卡片的名称。
例如::
假设我点击了一个显示 "MoreInformation" 的按钮来表示一张特定的电影卡片。我被路由到更多信息页面,因为该按钮将包含在 Link
.
中
MoreInformation里面Page/Component我要动态添加:
<h1>{name}</h1>
这只是我试图完成的一个基本示例,换句话说,我如何将特定电影卡的数据传输到更多信息页面,以便我可以访问它以添加动态数据。
如果我能得到反馈,我将非常感激,因为这个项目是时间敏感的...谢谢大家。
const MoviesPage = () => {
const [movies, setMovies] = useState([])
useEffect(() => {
axios
.get(
`https://gist.githubusercontent.com/ernestosotelo/9932c659b460e5ddeec8a8ae76164a0d/raw/ce8d7b248f61e73bf3c767538728505d6bac9835/json`
)
.then(res => {
const data = res.data
setMovies(data)
})
}, [])
return (
<Layout>
<div style={{ background: "hsl(215, 100%, 3%" }}>
<TopThree />
<p style={{ color: "#e0dfe2", fontSize: "1.7rem", marginTop: "3rem" }}>
<b
style={{
padding: ".5rem 1.5rem .5rem 1.5rem",
background: "#f9ba00",
fontSize: "2rem",
marginLeft: "4rem",
color: "black"
}}
>
!
</b>{" "}
Click 'Remove' to remove movies you definitely will not watch! There
is an undo option.
</p>
<div className={listingCSS.block}>
{movies.map(movie => {
return (
<Listing
key={movie.name}
name={movie.name}
plot={movie.plot}
date={movie.releaseDate}
genre={movie.genre}
imdbRating={movie.imdbRating ? movie.imdbRating : "N/A"}
tomatoRating={movie.tomatoRating ? movie.tomatoRating : "N/A"}
metaRating={movie.metaRating ? movie.metaRating : "N/A"}
erbertRating={movie.erbertRating ? movie.erbertRating : "N/A"}
tmdbRating={movie.tmdbRating ? movie.tmdbRating : "N/A"}
movshoRating={movie.movshoRating}
streamOn={movie.streamOn}
poster={movie.poster}
alt={movie.name}
/>
)
})}
</div>
</div>
</Layout>
)
}
您可以使用具有 HTML 5 个元素的 JS 在会话 (sessionStorage.getItem() and sessionStorage.setItem()
) 或本地 (localStorage.getItem() and localStorage.setItem()
) 上存储数据。
如果您更喜欢通过变量将数据存储在 setItem
上:
var session_data = sessionStorage.myValue //For session only
var local_data = localStorage.myValue //For local
sessionStorage.myValue = 'value' //For session only
localStorage.myValue = 'value' //For local
还请记住: 要存储 JavaScript 对象,您应该设置并将它们更改为字符串值:
sessionStorage.myObject = JSON.stringify(myObject); // Setting the object to a string
并在使用 getItem
时将其解析回对象以检索数据:
var myObject = JSON.parse(sessionStorage.myObject); // Parsing JSON back from string to object
另外: 您可以使用 window.name
来存储信息,但请注意,它仅在使用相同的 window/tab 时有效,因此请确保您的按钮或 link 将 target
值设置为 _self
。
您可以通过 JavaScript HERE
阅读有关不使用 cookie 存储数据的信息
有关网络存储的信息 API:https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API
有关 PersistJS 的信息(您可能会感兴趣):https://github.com/jeremydurham/persist-js
您需要创建一个路由来显示传递的数据。例如
<Route path="/movieInfo/:name" exact component={MoreInformation} />
在您的列表中创建一个 link 以获取更多信息的组件
<Link to={`/movieInfo/${this.props.name}`}>More info</Link>
在您的 MoreInformation 组件中访问道具
const { name } = this.props;
如果您使用的是功能组件,您可以检索值,如下所示。内部匹配参数。
function MoreInformation(props) {
const name = props.match.params.name;
return <h1>{name}</h1>;
}
因此,我在路由和管理数据方面遇到了一些问题。
Listing
组件本质上是一大堆卡片,其中包含我从我的要点中获取的电影数据。我使用 .map
为每张卡片创建了一个组件,并将值添加到 prop.
我的目标: 当我点击任何卡片的按钮时,我想转到一个页面并动态访问该电影卡片的名称。
例如::
假设我点击了一个显示 "MoreInformation" 的按钮来表示一张特定的电影卡片。我被路由到更多信息页面,因为该按钮将包含在 Link
.
MoreInformation里面Page/Component我要动态添加:
<h1>{name}</h1>
这只是我试图完成的一个基本示例,换句话说,我如何将特定电影卡的数据传输到更多信息页面,以便我可以访问它以添加动态数据。
如果我能得到反馈,我将非常感激,因为这个项目是时间敏感的...谢谢大家。
const MoviesPage = () => {
const [movies, setMovies] = useState([])
useEffect(() => {
axios
.get(
`https://gist.githubusercontent.com/ernestosotelo/9932c659b460e5ddeec8a8ae76164a0d/raw/ce8d7b248f61e73bf3c767538728505d6bac9835/json`
)
.then(res => {
const data = res.data
setMovies(data)
})
}, [])
return (
<Layout>
<div style={{ background: "hsl(215, 100%, 3%" }}>
<TopThree />
<p style={{ color: "#e0dfe2", fontSize: "1.7rem", marginTop: "3rem" }}>
<b
style={{
padding: ".5rem 1.5rem .5rem 1.5rem",
background: "#f9ba00",
fontSize: "2rem",
marginLeft: "4rem",
color: "black"
}}
>
!
</b>{" "}
Click 'Remove' to remove movies you definitely will not watch! There
is an undo option.
</p>
<div className={listingCSS.block}>
{movies.map(movie => {
return (
<Listing
key={movie.name}
name={movie.name}
plot={movie.plot}
date={movie.releaseDate}
genre={movie.genre}
imdbRating={movie.imdbRating ? movie.imdbRating : "N/A"}
tomatoRating={movie.tomatoRating ? movie.tomatoRating : "N/A"}
metaRating={movie.metaRating ? movie.metaRating : "N/A"}
erbertRating={movie.erbertRating ? movie.erbertRating : "N/A"}
tmdbRating={movie.tmdbRating ? movie.tmdbRating : "N/A"}
movshoRating={movie.movshoRating}
streamOn={movie.streamOn}
poster={movie.poster}
alt={movie.name}
/>
)
})}
</div>
</div>
</Layout>
)
}
您可以使用具有 HTML 5 个元素的 JS 在会话 (sessionStorage.getItem() and sessionStorage.setItem()
) 或本地 (localStorage.getItem() and localStorage.setItem()
) 上存储数据。
如果您更喜欢通过变量将数据存储在 setItem
上:
var session_data = sessionStorage.myValue //For session only
var local_data = localStorage.myValue //For local
sessionStorage.myValue = 'value' //For session only
localStorage.myValue = 'value' //For local
还请记住: 要存储 JavaScript 对象,您应该设置并将它们更改为字符串值:
sessionStorage.myObject = JSON.stringify(myObject); // Setting the object to a string
并在使用 getItem
时将其解析回对象以检索数据:
var myObject = JSON.parse(sessionStorage.myObject); // Parsing JSON back from string to object
另外: 您可以使用 window.name
来存储信息,但请注意,它仅在使用相同的 window/tab 时有效,因此请确保您的按钮或 link 将 target
值设置为 _self
。
您可以通过 JavaScript HERE
阅读有关不使用 cookie 存储数据的信息有关网络存储的信息 API:https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API
有关 PersistJS 的信息(您可能会感兴趣):https://github.com/jeremydurham/persist-js
您需要创建一个路由来显示传递的数据。例如
<Route path="/movieInfo/:name" exact component={MoreInformation} />
在您的列表中创建一个 link 以获取更多信息的组件
<Link to={`/movieInfo/${this.props.name}`}>More info</Link>
在您的 MoreInformation 组件中访问道具
const { name } = this.props;
如果您使用的是功能组件,您可以检索值,如下所示。内部匹配参数。
function MoreInformation(props) {
const name = props.match.params.name;
return <h1>{name}</h1>;
}