javascript - 将变量发送到 JS 页面/函数
问题描述
我想将一个变量“pokemon”从 Cell.js 发送到 Detail.js。
Cell.js 生成按钮,每个按钮都包含一个口袋妖怪,如果单击它应该打开一个关于口袋妖怪的详细页面。所以我需要将 pokemon(或 pokemon id)发送到 Detail.js 页面。我是 Javascript 新手,我不知道如何将变量发送到另一个 js 页面或函数。
细胞:
import React from 'react';
import './Cell.css';
import {ClassDeclaration as pokemon} from "@babel/types";
import {Link} from 'react-router-dom';
import Detail from "../../Detail";
function Cell({ pokemon }) {
let id = pokemon.name;
return (
<div className="Cell">
<Link to={`/Detail/${pokemon.name}/`}>
<div className="Cell_img">
<img src={pokemon.sprites.front_default} alt="" />
</div>
<div className="Cell_name">
{pokemon.name}
</div>
</Link>
</div>
);
}
export default Cell;
和详细代码:
import React, {useState} from 'react';
import './Detail.css';
import {ClassDeclaration as pokemon} from "@babel/types";
function Detail({ pokemon }) {
return (
<div className="Detail">
<div className="Detail_img">
{pokemon.name}
</div>
<div className="Detail_name">
</div>
</div>
);
}
export default Detail;
使成为:
const routing = (
<Router>
<div>
<Route exact path="/" component={App} />
<Route path="/Detail/:pokemon" component={Detail} />
</div>
</Router>
)
ReactDOM.render(routing, document.getElementById('root'));
PS.:我正在使用 React 和 PokeApi ( https://pokeapi.co/ )
解决方案
您有两种解决方案来实现这一目标:
- 您可以将整个
pokemon
对象传递给您的Detail
组件。(正如您编写的方式所建议的那样,Detail.js
但是您需要将其pokemon
作为道具传递给Route
.
<Route
path='/detail/:pokemon'
render={(props) => <Detail {...props} pokemon={pokemon} />}
/>
- 您可以简单地将 pokemon 的 id 传递给您的
Detail
组件。
<Route path="/Detail/:id" component={Detail} />
你会这样称呼:
<Link to={`/Detail/${pokemon.id}/`}>
然后在您的Detail
组件中,您可以获取 id 以进行新的 API 调用以仅获取一个 Pokemon :
function Detail(props) {
[isLoading, setIsLoading] = useState(true);
[pokemon, setPokemon] = useState(null);
const fetchPokemon = () => {
// let's assume an api call return result
let result = // implement your api call
setPokemon(result)
setIsLoading(false)
}
useEffect(() => {
fetchPokemon(props.match.params.id)
})
if (isLoading) return <p>Loading</p>
return (
<div className="Detail">
<div className="Detail_img">
{pokemon.image}
</div>
<div className="Detail_name">
{pokemon.name}
</div>
</div>
);
}
推荐阅读
- django - 通用详细信息视图 --userprofile 与帖子作者的链接
- python - 如何在使用 tf.summary.scalar() 根据自定义回调获取的指标生成的 Tensorboard 中以单个图形而不是 2 绘制数据?
- c++ - 目标多字节代码页 C++ 中没有 Unicode 字符的映射
- android - GLB 纹理不适用于场景形式
- javascript - 将函数传递给子组件时出错
- firebase-cli - 如何查看当前使用 CLI 登录的 firebase 帐户?
- flutter - 有没有办法让标签栏指示器在角落里向下弯曲?
- php - 如何在内存中模糊搜索 JSON 而不是 MySQL
- ios - InAppSettingsKit:如何从 PSChildPaneSpecifier 自定义添加项目的单个标题?
- dspace - 我在哪里可以更改 DSpace 的 Searche Box 样式?