如何在反应中将功能和对象传输到功能组件

Posted

技术标签:

【中文标题】如何在反应中将功能和对象传输到功能组件【英文标题】:How to transport a function and an object to a functional component in react 【发布时间】:2021-12-09 05:05:18 【问题描述】:

我仍然对打字稿有问题并做出反应,所以请居高临下。提前谢谢你们。

我正在尝试将函数和对象传输到组件

这是我的组件,名为WordItem

import React, FC, useContext from "react"
import  IWord  from "../../../models/IWord"
import Context from "../../../index";

const WordItem: FC<IWord> = (word) => 

    const store = useContext(Context)

    async function deleteWord () 
        await store.deleteWord(word.id)
    

    return (
        <div key=word.id>
            <div>
                <div>word.word</div>
                <div>word.wordT</div>
            </div>
            <div>
                <div>word.instance</div>
                <div>word.instanceT</div>
                <button onClick=() => deleteWord()>delete</button>
            </div>
        </div>
    )


export default WordItem

这是我的App.tsx 文件:

import React, FC, useContext, useState from 'react';
import Context from "./index";
import observer from "mobx-react-lite";
import IUser from "./models/IUser";
import WordService from "./services/WordService"
import  IWord  from './models/IWord';
import WordItem from './components/UI/word/WordItem';

const App: FC = () => 

  const store = useContext(Context)
  const [users, setUsers] = useState<IUser[]>([])
  const [words, setWords] = useState<IWord[]>([])
  
  async function getWords() 
    try 
      const response = await WordService.fetchWords()
      setWords(response.data)
     catch (e) 
      console.log(e)
    
  

    return (
      <div>

        <button onClick=getWords>Get words</button>
        words.reverse().map(word => <WordItem ...word/>)
        words.length == 0? 'there is no words': ''

      </div>
    )

  


export default observer(App);

如您所见,我在组件中成功传输了对象word,但我真的不知道如何传输函数。 &lt;WordItem getWords, ...word/&gt;&lt;WordItem getWords=getWords ...word/&gt; 没有帮助。喜欢如何正确地把 then 放入&lt;WordItem/&gt;

【问题讨论】:

【参考方案1】:

如果你想将word 变量和getWords 函数都传递给WordItem 组件,你应该这样做:

<WordItem word=word getWords=getWords />

然后你需要调整你的组件道具类型来匹配这些道具:

const WordItem: FC<word: IWord, getWords: () => Promise<void>> = (word, getWords) => 
...

我在上面的代码中使用object destructuring 来从prop 参数中获取两个道具,这相当于执行以下操作:

const WordItem: FC<word: IWord, getWords: () => Promise<void>> = (props) => 
  const word = props.word;
  const getWords = props.getWords;
...

【讨论】:

以上是关于如何在反应中将功能和对象传输到功能组件的主要内容,如果未能解决你的问题,请参考以下文章

用于在反应中传输数据的功能[重复]

如何在 useEffect 中将 JS 脚本与功能组件绑定

如何避免在反应功能组件中对“静态组件”进行不必要的重新渲染?

在功能性反应组件中获取未定义的道具

如何将状态值从一个组件访问到位于单独文件中的其他功能(不是组件)?反应js

如何更新/添加新数据以响应功能组件对象?