【问题标题】:sending props via the react-router Link component通过 react-router Link 组件发送 props
【发布时间】:2019-08-11 07:05:00
【问题描述】:

我在通过 react-router 的 Link 组件发送道具时遇到问题。 这是我负责显示特定元素的组件:

const ItemRecipe = ({ recipe }) => {
  const { label, image } = recipe.recipe;
  return (
    <li>
      <p> {label} </p>
      <img src={image} alt="food" />


      <Link to={{pathname: `/meals/${label}`, params: recipe }}>

        <p>next</p>
      </Link >
    </li>
  );
}

点击后我想打开带有特定食谱的页面。这个组件看起来像这样

class DetailsRecipe extends Component {
  constructor(props) {
    super(props);
    this.state = {
      recipe: props.match.params.recipe
    }
    console.log(this.state.recipe);
  }
  render () {
     <div>
         lorem lorem

      </div>
    )
  }
}

console.log(this.state.recipe) 显示 undefined。 如何解决此错误?如何通过 react-router 的 Link 组件正确发送数据?

我在 stackoverflow 上查看了类似的主题,但没有帮助解决我的问题

【问题讨论】:

    标签: reactjs react-router


    【解决方案1】:

    再看一下链接组件的documentation。 to 对象内允许的属性是:

    • 路径名:表示要链接到的路径的字符串。
    • 搜索:查询参数的字符串表示形式。
    • hash:要放入 URL 的哈希值,例如#a 哈希。
    • state:要持续到该位置的状态。

    我猜你想使用state 而不是params。

    编辑:

    所以你的代码应该是这样的:

    <Link to={{pathname: `/meals/${label}`, state: {"recipe": recipe} }}>
    

    然后你可以像这样访问链接组件内的state:

    this.state = {
      recipe: props.location.state.recipe
    };
    

    【讨论】:

    • 我将 props.match.params.recipe 更改为 props.match.params 没问题,但我只传递了名称,而不是整个配方对象
    • 我不太明白你做了什么改变。你有没有尝试我的建议?
    • 我更改了 this.state = { recipe: props.match.params } 并且没问题。但这不是我的目标,我想通过反应路由器中的链接传递对象
    • 查看我的更新答案以获取状态使用示例。
    • 您是否使用withRouter 之类的东西将props 注入路由组件?这或许可以解释为什么 props.match 可以,但 props.location 不行。
    猜你喜欢
    • 2019-12-05
    • 2021-03-21
    • 2019-03-10
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2018-01-17
    • 2021-12-15
    • 2019-11-12
    相关资源
    最近更新 更多