【问题标题】:how to pass props to Nav.Link of react-bootstrap如何将道具传递给 react-bootstrap 的 Nav.Link
【发布时间】:2020-06-13 16:02:21
【问题描述】:

我正在使用以下导航栏。我想将一些道具传递给 Nav.Link。我不知道如何将属性传递给 Nav.Link。还是就像 HTML href="a.html?param=test" 一样?

    const Navigation = (props) => {
    console.log(props);
    return (
        <Navbar bg="primary" variant="dark">
            <Navbar.Brand href="/">Dating Service</Navbar.Brand>
            <Navbar.Toggle aria-controls="basic-navbar-nav" />
            <Navbar.Collapse id="basic-navbar-nav">
                <Nav className="ml-auto">
                    <Nav.Link href="/">Home</Nav.Link>
                    <Nav.Link href="/CreateProfile">Create Profile</Nav.Link>
                    <Nav.Link href="/ViewProfile">View Profile</Nav.Link>
                </Nav>
            </Navbar.Collapse>
        </Navbar>
    )
}

【问题讨论】:

    标签: reactjs navbar react-bootstrap react-props


    【解决方案1】:

    在 Reactjs 18.6 中,您可以将 props 作为链接传递,然后可以通过 useLocation() 访问您的目标页面。下面的示例向您展示了如何传递道具

    import React from 'react';
    import { Link } from 'react-router-dom';
    import { Nav } from 'react-bootstrap';
    
    const ContactItem = ({ item }) => {
    return (
    <Nav>
       <Nav.Item>
          <Nav.Link as={Link}
          to={{
            pathname: '/َcontactform',
            state: { currentContact: item},
          }}
         >
         <i className="far fa-edit"></i>
         </Nav.Link>
       </Nav.Item>
    </Nav>
    
    )}
        
    import React from 'react';
    import { useLocation } from 'react-router-dom';
    
    const ContactForm = () => {
      let location = useLocation();
      const { currentContact} = location.state;
    
      console.log(currentContact)
      return (  ... Components ...  )
    
    }
    

    【讨论】:

    • 你的意思是 16.8 !!
    【解决方案2】:

    您正在将道具传递给您的 Navigation 组件,这没关系;您可以使用Nav.Link 中的道具,例如:

    <Nav.Link href={links[0].url}>{links[0].label}</Nav.Link>
    

    示例js

    import React, { useState } from "react";
    import { Navbar, Nav } from "react-bootstrap";
    
    const Navigation = ({ name, links }) => {
      return (
        <>
          <div>
            <Navbar bg="primary" variant="dark">
              <Navbar.Brand href="/">Dating Service</Navbar.Brand>
              <Navbar.Toggle aria-controls="basic-navbar-nav" />
              <Navbar.Collapse id="basic-navbar-nav">
                <Nav className="ml-auto">
                  {links.map((val, indx) => {
                    return (
                      <Nav.Link key={indx} href={val.url}>
                        {val.label}
                      </Nav.Link>
                    );
                  })}
                </Nav>
              </Navbar.Collapse>
            </Navbar>
          </div>
          <h1>Hello {name}!</h1>
        </>
      );
    };
    export default Navigation;
    

    工作stackblitz here

    【讨论】:

    • 感谢您的回答。我可以看到你正在从 JSON 类型的状态制作导航栏。并通过循环 JSON 数据生成导航栏。但我没有看到任何参数被传递。我必须传递参数。类似于我的 href=/apaht/aparameter。稍后我要获取登陆url上的参数。
    • 打开 stackblitz 链接... 2 个道具(名称和链接)正在作为道具传递给该组件 - 希望对您有所帮助
    • 我明白了,它会通过一些改变来解决我的问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-08-01
    • 2020-12-19
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2018-04-25
    • 2018-08-25
    • 2015-09-21
    相关资源
    最近更新 更多