【问题标题】:How to pass values in the <Link to = {}> and get them from another component using [react / typescript]如何在 <Link to = {}> 中传递值并使用 [react / typescript] 从另一个组件获取它们
【发布时间】:2020-05-09 01:18:02
【问题描述】:

我想看看如何使用打字稿在&lt;Link to = {}&gt; 中传递 id。然后在SeriesSection 组件中获取链接的id。

SerieComponent.tsx

import React from 'react';
import { Link } from "react-router-dom";
import Serie from '../../interfaces/Serie/Serie';

type T = {
  serie: Serie
};

const SerieComponent: React.FC<T> = ({ serie: { id, title, sinopsis, poster, rating, year, extra } }) => {
  let channel = extra.map(x => { return x.channel });

  return (
    <Link to={}/>
      <div className="post-2930 movie type-movie status-publish has-post-thumbnail hentry movie_genre-action">
        <div className="movie__poster">
          <br />
          <a className="masvideos-LoopMovie-link masvideos-loop-movie__link movie__link">
            <img width="300" height="450" src={poster} className="movie__poster--image" alt={title} />
            <img width="300" height="450" src={poster} className="movie__poster--image" alt={title} sizes="(max-width: 300px) 100vw, 300px" />
          </a>
        </div>
        <div className="movie__body">
          <div className="movie__info">
            <div className="movie__info--head">
              <div className="movie__meta"><span className="movie__meta--release-year">{year}</span><span className="movie__meta--genre">{channel}</span></div>
              <a className="masvideos-LoopMovie-link masvideos-loop-movie__link movie__link">
                <h3 className="masvideos-loop-movie__title  movie__title">{title}</h3>
              </a>
            </div>
            <div className="movie__short-description">
              <div>
                <p>{sinopsis}</p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </Link>

  )
};

export default SerieComponent;

这个组件是我想要获取链接ID的地方。

import React from 'react';

const SerieSection: React.FC = () => {
  return(
    <div>

    </div>
  )
};

export default SerieSection;

如果你注意到我已经提到了路线

&lt;Route exact path="/serie-section/:id" component={SerieSection}&gt;&lt;/Route&gt;

import React from 'react';
import { Switch, Route, Redirect, Link } from 'react-router-dom';
import { makeStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import Typography from '@material-ui/core/Typography';
import Button from '@material-ui/core/Button';
import IconButton from '@material-ui/core/IconButton';
import MenuIcon from '@material-ui/icons/Menu';
import Home from '../Home/index';
import About from '../About/index';
import Footer from '../Footer/index';
import SerieSection from '../SerieSection/index';
import useStyles from './styles';

require('../../db/index.ts');

const App: React.FC = () => {
  const classes = useStyles();

  return (
    <div className={classes.root}>
      <AppBar position="static">
        <Toolbar>
          <Button component={Link} to="/" color="inherit">Home</Button>
          <Button component={Link} to="/about" color="inherit">About</Button>
        </Toolbar>
      </AppBar>
      <div className="App">
        <Switch>
          <Route exact path="/" component={Home}></Route>
          <Route exact path="/about" component={About}></Route>
          <Route exact path="/serie-section/:id" component={SerieSection}></Route>
          <Redirect to="/" />
        </Switch>
        <Footer/>
      </div>
    </div>
  )
}

export default App;

【问题讨论】:

  • 您遇到的具体问题是什么?构建 to= 只是字符串模板的问题,文档中的示例当然显示了如何访问路径参数。
  • 我想看看我应该如何将值传递给链接,例如'/ series-section':$ {id}。以及如何从我是新手使用 react/typescript 的 SeriesSection 组件获取 id
  • 是的,我知道,但在打字稿中它是不同的。
  • 究竟是什么方式?您在应用它时遇到过具体问题吗?给minimal reproducible example。在您发布的代码中,您似乎没有尝试任何您说想要的事情。

标签: reactjs typescript react-router


【解决方案1】:
<Link to={{
  pathName: "/yourpathname",
  someProp:{foo:"bar"}
}}>Your Path</Link>

并且比此链接指向的组件中

console.log("test: ", props.location.someProp)

如果第二个组件是类别忘了this关键字

【讨论】:

    【解决方案2】:

    我必须参考RouteComponentProps

    import React from 'react';
    import { RouteComponentProps } from 'react-router-dom';
    
    
    interface State {
      id: string;
    }
    
    interface Props extends RouteComponentProps<State>{
    
    }
    
    const SerieSection: React.FC<Props> = (props) => {
      let id = props.match.params.id;
      return(
        <div>
        <h1>{id}</h1>
        </div>
      )
    };
    
    export default SerieSection;
    

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 2021-10-20
      • 2020-03-22
      • 1970-01-01
      • 2022-01-02
      • 2022-08-17
      相关资源
      最近更新 更多