ReactJS 道具来自 router.js

时间:2021-05-24 13:45:33

标签: javascript reactjs

我有这个 routes.js 文件,带有来自 App.js 的道具,我将这 4 个道具传递给 Board 组件。当我在 route.js 中的某个道具中执行 console.log 或警报时,它运行良好,但它在我的 Board 组件中未定义。

这只是一个刽子手游戏。

route.js

import React from "react";
import Board from "./components/Board";
import { BrowserRouter, Switch, Route } from "react-router-dom";

const Routes = ({ buttons, hangman, tipImage, objectiveWord }) => (
    <BrowserRouter>
      <Switch>
        <Route
          path="/"
          buttons={buttons}
          hangman={hangman}
          tipImage={tipImage}
          objectiveWord={objectiveWord}
          component={Board}
        />
      </Switch>
    </BrowserRouter>
);

export default Routes;

/components/Board/index.js

import React, { useState } from "react";
import "./index.scss";
import TiedMan from "../TiedMan";
import RightWrongCounter from "../RightWrongCounters";

const Board = ({ objectiveWord, buttons, hangman, tipImage }) => {

  const [letterClicked, setLetterClicked] = useState([]);
  let rightLettersCount = 0;
  let wrongLettersCount = 0;

  for (let i = 0; i < letterClicked.length; i++) {
        if (!objectiveWord.includes(letterClicked[i])) {
[...]

App.js

import "./App.scss";
import Board from "./components/Board";
import Routes from './routes';
import { BrowserRouter as Router } from 'react-router-dom';

function App() {
  const palavras = ["sing", "dance", "talk", "watch", "walk"];

  const images = [
    "https://mk0musicgrotto1kyale.kinstacdn.com/wp-content/uploads/2018/05/singing-woman-black-dress-smoke-bg-header.jpg",
    "https://img.freepik.com/free-photo/full-length-portrait-jumping-white-girls-expressing-happy-emotions-portrait-best-friends-funny-dancing-together_197531-10953.jpg?size=626&ext=jpg&ga=GA1.2.862581661.1615161600",
    "https://post.healthline.com/wp-content/uploads/2020/12/Female_Friends_Talking_Coffee_732x549-thumbnail-732x549.jpg",
    "https://media-cldnry.s-nbcnews.com/image/upload/newscms/2019_30/2946851/190725-watching-tv-al-1056-2946851.jpg",
    "https://www.gannett-cdn.com/media/2020/04/20/USATODAY/usatsports/gettyimages-104732257.jpg?width=2560",
  ];

  const objectiveIndex = Math.floor(Math.random() * palavras.length);

  const objective = palavras[objectiveIndex].toUpperCase().split("");

  const tipImage = images[objectiveIndex];

  const hangman = [
    "https://4.bp.blogspot.com/-psq1cvp8ZqA/V1S9Jxrju4I/AAAAAAAAA_4/VGZ7GeSGWaY1UQY0WpENjBUnE621fJVPACLcB/s200/forca0.png",
    "https://3.bp.blogspot.com/-G70a1KHVTs0/V1S9J0BgL9I/AAAAAAAAA_w/ND8WKk6ffeIA3k9ii1bTfyp-HlOK_4I6QCLcB/s200/forca1.png",
    "https://1.bp.blogspot.com/-RB6o0ECFMQU/V1S9J1YE1-I/AAAAAAAAA_0/Zod7jdOPLg4nxihqX8DyQoLTLqr1EUS1QCLcB/s200/forca2.png",
    "https://1.bp.blogspot.com/-_8-j5ol9Fvg/V1S9Kb1_1cI/AAAAAAAABAA/ywK-WN8MYZQTAA9LXUfcoFAEFL3OHdLfQCLcB/s200/forca3.png",
    "https://2.bp.blogspot.com/-dTFL3jVSS5Q/V1S9KQRuuxI/AAAAAAAABAE/hDo6y6m01tMJ0QmwEeEQyi0CNdxP9HeGwCLcB/s200/forca4.png",
    "https://3.bp.blogspot.com/-1HoOX4Aze8c/V1S9KiHxpyI/AAAAAAAABAQ/pcnHKw0UbwAKdcaMl6xfkD6ohNLJQnzowCLcB/s200/forca5.png",
    "https://2.bp.blogspot.com/-AJjWekfS3nQ/V1S9KlnvFMI/AAAAAAAABAM/978o9oBROYoOm4tPJTDk5Zb8hxmN6sqYgCLcB/s200/forca6.png",
  ];

  const buttons = [
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "H",
    "I",
    "J",
    "K",
    "L",
    "M",
    "N",
    "O",
    "P",
    "Q",
    "R",
    "S",
    "T",
    "U",
    "V",
    "W",
    "X",
    "Y",
    "Z",
  ];

  return (
    <div className="App">
      <div className="container-board">
     
          <Routes buttons={buttons} hangman={hangman} tipImage={tipImage} objectiveWord={objective}/>
        {/* <Board buttons={buttons} hangman={hangman} tipImage={tipImage} objectiveWord={objective} /> */}
       
      </div>
    </div>
  );
}

export default App;

1 个答案:

答案 0 :(得分:1)

Route 是 'react-router-dom' 提供的组件,您不应将自己的自定义道具传递给它。

如果您需要向通过 Route 呈现的组件传递额外的道具,那么您可以使用 render 组件的 Route 道具。

const Routes = ({ buttons, hangman, tipImage, objectiveWord }) => (
  <BrowserRouter>
    <Switch>
      <Route
        path="/"
        render={(props) => (
          <Board
            buttons={buttons}
            hangman={hangman}
            tipImage={tipImage}
            objectiveWord={objectiveWord}
            {...props}
          />
        )}
      />
    </Switch>
  </BrowserRouter>
);
相关问题