简体   繁体   English

通过道具传递物品

[英]Passing item through props

I'm trying to pass down the object through props to show the user more details about the item on the detail page but something seems to be broken. 我正在尝试通过道具将对象传递给用户,以在详细信息页面上向用户显示有关该项目的更多详细信息,但似乎已损坏。 It gives me a './src/components/Trial.js Line 38: Parsing error: Unexpected token, expected "," ' error 它给了我一个'./src/components/Trial.js第38行:分析错误:意外的令牌,预期为“,”'错误

My brewery.js 我的brewery.js

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

class Brewery extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      breweries: []
    };
  }

  componentDidMount() {
    fetch("https://api.openbrewerydb.org/breweries")
      .then(response => response.json())
      .then((data) => {
        this.setState({
          breweries: data,
        })
      })
  }

  renderBreweries = () => {
    const { breweries } = this.state;
    return breweries.slice(0,10).map((brewery) =>
      <Brewery key={brewery.id} brewery={brewery} />
  )
  }

  render() {

    const { breweries } = this.state;

    return(
      <div>
        {this.renderBreweries()}
      </div>
    )
  }
}

export default Brewery;

My trial.js 我的trial.js

import React from "react";
import Brewery from "./Brewery";

class Trial extends React.Component {
  render() {
    const { brewery } = this.props;
    return(
      <div>
        {brewery.name}
      </div>

  }
}

export default Trial; 
  1. You have bracket issue in trial.js 您在trial.js中有括号问题
  2. You are running into infinite calls, creating brew in did mount 您正在遇到无限调用,在did mount中创建brew

    return breweries.slice(0,10).map((brewery) => <Brewery key={brewery.id} brewery={brewery} /> )

Every time this calls you are again calling the api and getting the same data. 每次此调用时,您都再次调用api并获取相同的数据。 because of this you are never gonna get the result. 因此,您永远不会得到结果。

Create new component to render the result or you can use existing one but do not call recursively. 创建新组件以呈现结果,或者您可以使用现有组件,但不要递归调用。 something like this 像这样的东西

export const RenderBreweries=(props) =>{
  return <div>{props.brewery.id}</div>
}

And call it like this 并这样称呼它

return breweries.slice(0, 10).map((brewery) =>
      <RenderBreweries key={brewery.id} brewery={brewery} />
    )

This will render the breweris. 这将使啤酒酿造。 and yes you will get the props passed key and brewery by props.key and props.brewery 是的,您将通过props.keyprops.brewery获得通过密钥的道具和啤酒厂

Your component should look like this 您的组件应如下所示

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

class Brewery extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      breweries: []
    };
  }

  componentDidMount() {   
    fetch("https://api.openbrewerydb.org/breweries")
      .then(response => response.json())
      .then((data) => {
        this.setState({
          breweries: data,
        })
      })
  }

  renderBreweries = () => {
    const { breweries } = this.state
    return breweries.slice(0, 10).map((brewery) =>
      <RenderBreweries key={brewery.id} brewery={brewery} />
    )
  }

  render() {
   console.log(this.breweries)
    const { breweries } = this.state;

    return (
      <div>
        {this.renderBreweries()}
      </div>
    )
  }
}

export const RenderBreweries=(props) =>{
  return <div>{props.brewery.id}</div>
}

export default Brewery;

Demo 演示版

You open a parenthesis after return in Trial.js and never close it. Trial.js中返回后,您可以打开一个括号,并且永远不要将其关闭。

class Trial extends React.Component {
  render() {
    const { brewery } = this.props;
    return(
      <div>
        {brewery.name}
      </div>
    ); //<-- missing part
  }
}

I would recommend using a linter, like eslint that can save you from a lot of errors like this. 我建议使用像eslint这样的eslint ,这样eslint许多错误。

You have an extra , after breweries: data (should not be the case though) , did you try removing that ? breweries: data之后,您还有一个额外的功能breweries: data (虽然不应该这样),您是否尝试删除它?

componentDidMount() {
fetch("https://api.openbrewerydb.org/breweries")
  .then(response => response.json())
  .then((data) => {
    this.setState({
      breweries: data,
    })
  })
}

and below as well, there is a missing parenthesis, you can change Trial as below, 并且下面也缺少括号,您可以按以下方式更改Trial

class Trial extends React.Component {
    render() {
    return(
      <div>
        {this.props.brewery.name}
      </div>
    ); // here
  }
}

So when you want to render a Trial, you should use, 因此,当您要进行试用时,应该使用

<Trial brewery={brewery} /> 

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

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