简体   繁体   English

为什么我无法通过Link组件访问state?

[英]Why Am I Not Able to Access state Through a Link Component?

I've tried making tons of small changes to this code snippet (extra curly braces, changing ':' to '=' in the Link component code, and still location.state is null is on the ReportEdit component I'm trying to pass state to. Is this not something that is possible in React Router Dom 6.2.1?我已经尝试对此代码片段进行大量小的更改(额外的花括号,将链接组件代码中的 ':' 更改为 '=',仍然 location.state 是 null 在我试图传递的 ReportEdit 组件上state to. 这在 React Router Dom 6.2.1 中不是可能的吗?

Here's the code这是代码

Component drawing the link绘制链接的组件

<Link 
  to={`/report/${report.id}/edit`}
  state={{hi: "hi"}}>
 <Button>
    Edit
 </Button>
</Link>

Linked component I want to pass state to我想将 state 传递给的链接组件

import { Form, Button } from 'react-bootstrap'
import { Link, useParams, useLocation } from 'react-router-dom'
import axios from 'axios';

const ReportEdit = props => {

  const [report, setReport] = useState([]);
  const [ rep_type, setRepType ] = useState(report.rep_type);
  const [ rep_count, setRepCount ] = useState(report.rep_count);

  let params = useParams()
  const location = useLocation()

  console.log(location.state) // <--- always 'null'

  const id = params.id

  //async function handleSubmit() {
    //let data = await axios.put(`http://localhost:3001/reports/${id}`)
   // if (data) {
     // console.log(data.data.report)
    //}
  //}

  return (
    <div>
      <Form onSubmit={e => handleSubmit(e)}>
        <Form.Group className="mb-1" controlId="rep_type">
          <Form.Control 
            type="text" 
            placeholder={props.rep_type}
            name="rep_type"
            value={rep_type}
            onChange={e => setRepType(e.target.value)} 
          />
        </Form.Group>

        <Form.Group className="mb-1" controlId="rep_count">
          <Form.Control 
            type="number" 
            placeholder={props.rep_count} 
            name="rep_count"
            value={rep_count} 
            onChange={e => setRepCount(e.target.value)} 
          />
        </Form.Group>
      <Button variant="primary" type="submit">Submit</Button>
    </Form>
  </div>
  )
}

export default ReportEdit;

You can reference to the official react-router-dom document , you can pass params through object, for example:可以参考官方react-router-dom文档,可以通过object传递params,例如:

<Link
  to={{
    pathname: `/report/${report.id}/edit`,
    state: { id: report.id }
  }}
/>

I figured it out.我想到了。

I was only refreshing the target page in development, and I needed to actually be using the link to pass props via state.我只是在开发中刷新目标页面,实际上我需要使用链接通过 state 传递道具。 fml. fml。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM