有没有一种方法可以在不使用props对象的情况下在组件之间传递属性?

乔希·西蒙(Josh Simon)

我有一个显示咖啡馆列表的组件。在此组件( CafeList.jsx)中,发出了axios请求,该请求返回了咖啡馆列表,该咖啡馆列表已映射并呈现到浏览器。
我希望用户能够单击咖啡馆,然后转到包含有关该咖啡馆的特定信息的页面(在此阶段为CafeReview.jsx)。

我需要将咖啡馆ID(_id)从CafeList传递到CafeReviews,以便可以在axios请求中使用它,以带回有关被点击的咖啡馆的特定数据。有什么建议?另外,我是否有正确的一般方法?

组件

CafeList.jsx

import React, {useState, useEffect} from 'react'
import axios from 'axios'
import {Link} from 'react-router-dom'


const CafeList = () => {
    const [cafes, setCafe] = useState([])

    useEffect(() => {
        axios.get('/api/all-cafes')
        .then(cafe => {
            setCafe(cafe.data)
        })
        .catch(err => {
            console.log(err)
        })
    },[])

    return(
            <div className = 'cafe-container-container'>
                <h2>Cafes</h2>
                {
                cafes.map(cafe =>{
                    const {cafeName,photoURL,_id} = cafe
                    
                    return (
                    <Link to = {`/cafe-reviews/${_id}`} style={{ textDecoration: 'none' }} >
                        <div className = 'cafe-container'>
                            <h2>{cafeName}</h2>
                            <img src = {photoURL}></img>
                        </div>
                    </Link>
                    )
                })
            }
            </div>

    )
}

export default CafeList

CafeReviews.jsx

import React,{useState, useEffect} from 'react'
import axios from 'axios'

const CafeReviews = () => {
  const [cafe,setCafe] = useState([])

  useEffect(() => {
    axios.get('/api/cafe/:id')
    .then(result => {
        setCafe(result.data)
    })
  },[])

  return(
      <div>
          {
             cafe.map(item => {
                 return (
                     <h2>{item.cafeName}</h2>
                 )
             }) 
          }
      </div>
  )
}

export default CafeReviews

路线和数据模型

通过ID获取咖啡馆:

app.get('/api/cafe/:id', (req,res) => {
    const id =req.params.id
    Cafe.findById(id)
    .then(result => {
        res.send(result)
    })
    .catch(err => {
        console.log(err)
    })
})

咖啡厅型号:


const mongoose = require('mongoose')
const Schema = mongoose.Schema

const cafeSchema = new Schema({
    cafeName:String,
    photoURL:String,
}, {timestamps:true})

const Cafe = mongoose.model('cafes', cafeSchema)

module.exports = Cafe

路由器:

import React from 'react'
import AddReview from './components/AddReview'
import Main from './components/Main'
import AllReviews from './components/AllReviews'
import CafeReviews from './components/CafeReviews'
import './styles.css'

import {BrowserRouter as Router, Switch, Route} from 'react-router-dom'

const App = () => {
  return(
    <Router>
    <div>
      <Switch>
      <Route path ='/' exact component = {Main}/>
      <Route path ='/add-review' component = {AddReview}/>
      <Route path ='/all-reviews' component = {AllReviews}/>
      <Route path ='/cafe-reviews/:id' component = {CafeReviews}/>
      </Switch>
    </div>
    </Router>
  )
}

export default App;
杰伊斯444

由于CafeReviews组件是直接由呈现的<Route/>,因此默认情况下,所有的react router道具都传递给了它。从那里您可以访问参数,这些参数将:id在URL中包含该特定咖啡馆的。所以尝试这样的事情:

const CafeReviews = ({ match }) => {
  const [cafe,setCafe] = useState([])

  useEffect(() => {
    axios.get(`/api/cafe/${match.params.id}`)
    .then(result => {
        setCafe(result.data)
    })
  },[])

尚未测试,可能需要检查文档react-router-dom以查看物体的形状是否正确,等等,但是总的来说,这就是访问组件内部参数的方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以在不使用现有表的情况下在选择中返回多于1行

来自分类Dev

有没有一种方法可以在不覆盖指定属性的情况下在组件上分布道具?

来自分类Dev

有没有一种方法可以在不使用表的情况下在MS-Access中创建表单?

来自分类Dev

有没有一种方法可以在不使用用户定义函数的情况下在SQL中动态执行查询?

来自分类Dev

有没有一种方法可以在不使用yum的情况下在CentOS中找到文件的源软件包?

来自分类Dev

有没有一种方法可以在不使用uuencode的情况下在sendmail命令中附加文件

来自分类Dev

有没有一种方法可以在不使用循环的情况下在矩阵上进行4个像元的计算

来自分类Dev

有没有一种方法可以在不使用Drush的情况下从bash脚本安装Drupal?

来自分类Dev

有没有一种方法可以在不使用队列或Blob存储的情况下触发webjob?

来自分类Dev

有没有一种方法可以在不使用小部件的情况下访问PageState类中的页面属性

来自分类Dev

有没有一种方法可以在没有截图的情况下在Codename One中保存Graphics对象?

来自分类Dev

Swift-有没有一种方法可以在不调用对象的情况下在对象上运行方法?(自?)

来自分类Dev

有没有一种方法可以在不指定图块数量的情况下在Unity 3D对象上重复纹理?

来自分类Dev

有没有一种方法可以将props隐式传递给组件?

来自分类Dev

有没有一种方法可以将props隐式传递给组件?

来自分类Dev

有没有一种方法可以在不使用商店的情况下在Win10(v1709)上安装Ubuntu(Linux的Windows子系统)?

来自分类Dev

有没有一种方法可以在不使用一个热编码器的情况下训练RNN?

来自分类Dev

有没有一种方法可以使用Dropbox API在不使用Web服务器带宽的情况下下载文件?

来自分类Dev

有没有一种方法可以在不使用R中使用sample()函数的情况下创建向量的排列?

来自分类Dev

有没有一种方法可以在不使用className的情况下使用ID在React中设置元素的样式?

来自分类Dev

有没有一种方法可以在不使用R中使用sample()函数的情况下创建向量的排列?

来自分类Dev

有没有一种方法可以在不使用组的情况下引用re.sub中的整个匹配表达式?

来自分类Dev

Scala中有没有一种方法可以在不使用if嵌套的情况下转义多个return语句

来自分类Dev

PHP中有没有一种方法可以在不使用ob_gzhandler的情况下从JSON中删除空格?

来自分类Dev

有没有一种方法可以在不使用UINavigationController的情况下更改情节提要中的UINavigationBar的高度?

来自分类Dev

有没有一种方法可以在不使用嵌套循环的情况下将N个长度为N的N个数组推入数组?

来自分类Dev

有没有一种方法可以在不使用重命名系统调用的情况下更改文件名?

来自分类Dev

有没有一种方法可以在不使用负像素值的情况下简化和简化动画div?

来自分类Dev

有没有一种方法可以在不使用骆驼的.bean关键字的情况下自动布线Bean?

Related 相关文章

  1. 1

    有没有一种方法可以在不使用现有表的情况下在选择中返回多于1行

  2. 2

    有没有一种方法可以在不覆盖指定属性的情况下在组件上分布道具?

  3. 3

    有没有一种方法可以在不使用表的情况下在MS-Access中创建表单?

  4. 4

    有没有一种方法可以在不使用用户定义函数的情况下在SQL中动态执行查询?

  5. 5

    有没有一种方法可以在不使用yum的情况下在CentOS中找到文件的源软件包?

  6. 6

    有没有一种方法可以在不使用uuencode的情况下在sendmail命令中附加文件

  7. 7

    有没有一种方法可以在不使用循环的情况下在矩阵上进行4个像元的计算

  8. 8

    有没有一种方法可以在不使用Drush的情况下从bash脚本安装Drupal?

  9. 9

    有没有一种方法可以在不使用队列或Blob存储的情况下触发webjob?

  10. 10

    有没有一种方法可以在不使用小部件的情况下访问PageState类中的页面属性

  11. 11

    有没有一种方法可以在没有截图的情况下在Codename One中保存Graphics对象?

  12. 12

    Swift-有没有一种方法可以在不调用对象的情况下在对象上运行方法?(自?)

  13. 13

    有没有一种方法可以在不指定图块数量的情况下在Unity 3D对象上重复纹理?

  14. 14

    有没有一种方法可以将props隐式传递给组件?

  15. 15

    有没有一种方法可以将props隐式传递给组件?

  16. 16

    有没有一种方法可以在不使用商店的情况下在Win10(v1709)上安装Ubuntu(Linux的Windows子系统)?

  17. 17

    有没有一种方法可以在不使用一个热编码器的情况下训练RNN?

  18. 18

    有没有一种方法可以使用Dropbox API在不使用Web服务器带宽的情况下下载文件?

  19. 19

    有没有一种方法可以在不使用R中使用sample()函数的情况下创建向量的排列?

  20. 20

    有没有一种方法可以在不使用className的情况下使用ID在React中设置元素的样式?

  21. 21

    有没有一种方法可以在不使用R中使用sample()函数的情况下创建向量的排列?

  22. 22

    有没有一种方法可以在不使用组的情况下引用re.sub中的整个匹配表达式?

  23. 23

    Scala中有没有一种方法可以在不使用if嵌套的情况下转义多个return语句

  24. 24

    PHP中有没有一种方法可以在不使用ob_gzhandler的情况下从JSON中删除空格?

  25. 25

    有没有一种方法可以在不使用UINavigationController的情况下更改情节提要中的UINavigationBar的高度?

  26. 26

    有没有一种方法可以在不使用嵌套循环的情况下将N个长度为N的N个数组推入数组?

  27. 27

    有没有一种方法可以在不使用重命名系统调用的情况下更改文件名?

  28. 28

    有没有一种方法可以在不使用负像素值的情况下简化和简化动画div?

  29. 29

    有没有一种方法可以在不使用骆驼的.bean关键字的情况下自动布线Bean?

热门标签

归档