【问题标题】:export array with Hooks in React在 React 中使用 Hooks 导出数组
【发布时间】:2021-01-05 12:46:29
【问题描述】:

我正在尝试导出我在函数中生成的数组,以便可以在我的主要组件中使用它。我有以下代码:-

子组件:-

import { useState, useEffect } from 'react';

const DeckFootball = () => {
    const [ fullDeck, setFullDeck ] = useState([])

    useEffect(() => {
        generateDeck()
    }, [deck])

    const deck = []
    const deckLimits = {
        joker: 4,
        goalkeepers: 12,
        defenders: 12,
        midfielders: 12,
        attackers: 12,
      }

      const generateDeck = () => {
        for (let i = 0; i < deckLimits.joker; i++) {
          generateCard("joker")
        }
        for (let i = 0; i < deckLimits.goalkeepers; i++) {
          generateCard("goalkeeper")
        }
        for (let i = 0; i < deckLimits.defenders; i++) {
          generateCard("defender")
        }
        for (let i = 0; i < deckLimits.midfielders; i++) {
          generateCard("midfielder")
        }
        for (let i = 0; i < deckLimits.attackers; i++) {
          generateCard("attacker")
        }
        setFullDeck(deck);
      }
    
      const generateCard = item => {        
        const card = {...}
    
        //add this card to the deck
        deck.push(card)
      }      
    
    return [fullDeck];

}

export default DeckFootball; 

然后在我的主要组件中,我正在执行以下操作:-

主要组件:-

import {fullDeck} from '../../decks/football/deck_football';

当我console.log(fullDeck) 这是undefined

我的语法错了吗?似乎没有调用子组件。

我也试过

import DeckFootball, {fullDeck} from '../../decks/football/deck_football'; 

然后是console.log(DeckFootball.fullDeck),但这也是未定义的。

任何帮助将不胜感激!

谢谢

【问题讨论】:

    标签: javascript reactjs react-hooks react-functional-component


    【解决方案1】:

    我认为这里存在混淆。您正在导出的内容具有组件的语法,您提到它是一个钩子(它的名称应该以 use 开头作为一个钩子)并且您正在渲染一些我相信的静态数据。如果这是你的情况,一个普通的 javascript 函数会为你解决问题,你不需要任何与 React 相关的东西

    export const buildDeck = () => {
      const deck = []
      const deckLimits = {
        joker: 4,
        goalkeepers: 12,
        defenders: 12,
        midfielders: 12,
        attackers: 12,
      }
      const generateCard = item => {        
        const card = {...}
    
        //add this card to the deck
        deck.push(card)
      }      
      
    
      for (let i = 0; i < deckLimits.joker; i++) {
        generateCard("joker")
      }
      for (let i = 0; i < deckLimits.goalkeepers; i++) {
        generateCard("goalkeeper")
      }
      for (let i = 0; i < deckLimits.defenders; i++) {
        generateCard("defender")
      }
      for (let i = 0; i < deckLimits.midfielders; i++) {
        generateCard("midfielder")
      }
      for (let i = 0; i < deckLimits.attackers; i++) {
        generateCard("attacker")
      }
      
        
      return fullDeck;
    }
    

    你不需要 React 组件,因为你没有做任何与 UI 相关的事情。

    您当前的代码不需要任何状态或效果,因为在您的应用程序的生命周期内没有什么需要做出反应或更新 - 所以您也不需要它是一个钩子

    你可以像这样导入这个函数

    import { buildDeck } from 'the/path'
    

    其中(您将在每次渲染时引用相同的结果 - 这很有意义,因为它看起来像是静态数据)

    例如

    const Mycomponent = () => {
      // inside render - it will be build on every render. You might be ok or not with that
      const fullDeck = buildDeck()
    }
    

    或

    // outside render - it will be build just once
    const fullDeck = buildDeck()
    const Mycomponent = () => {
      //  you can log it on every render, but it will be referencing the exact reference of the same deck on every render
      console.log(fullDeck)
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2021-03-01
      相关资源
      最近更新 更多