从功能组件 React Native 调用功能

Call a function from a functional component React Native

我有下一个问题,试图从功能组件调用函数,例如 class 组件中的 shared。 我的测试代码是:

import React, { useState } from 'react'

export const TestShared = () => {
    const [number, setNumber] = useState(0)

    const increase = () => {
        return setNumber(prevValue => prevValue + 1)
    }

    const getNumber = () => {
        return number
    }
}

在另一个文件中,我导入 TestShared 并尝试调用 TestShared.increase()TestShared.getNumber() 之类的函数,但当然是未定义的。

如何在不使用 useContext 的情况下实现此目的?如果有什么办法。

谢谢!

You can check code here

const TestShared = () => {
 const [number, setNumber] = useState(0)

    const increase = () => {
        return setNumber(prevValue => prevValue + 1)
    }

    const getNumber = () => {
        return number
    }

    return {
        increase,
        getNumber
    };
}

export default TestShared ;

而你想要这个功能的地方就像这样导入

import React, {useEffect} from "react";

import TestShared from './Helpers/TestShared' 

function MyComponent = () => {
    const {increase, getNumber} = TestShared();
}

我只是想在一些实验之后对@arsian 的回答进行更多扩展。

  1. 在父组件中导入对象时使用的名称必须与子组件中导出元素的名称完全相同,否则返回将是未定义的:

子组件:

return {
        increase,
        getNumber
    };
export default TestShared ;

父组件:

const {wrongName, getWrong} = TestShared(); //This will NOT work
console.log(wrongName); //undefined

const {increse, getNumber} = TestShared(); //This WILL work

  1. 返回元素可以是statesetState函数,实际上,它们可以是任何类型(函数、数组、对象、列表...)。此外,导出或导入时元素的顺序无关紧要(名称无关紧要)。例如,

子组件:

const arr = [0];
const obj = { a: 1 };
function fn() {
        console.log(arr, obj);
  };

return {
        number,
        setNumber,
        arr,
        obj,
        fn

    };

父组件:

const {number, setNumber,obj,arr,fn} = TestShared();
console.log(arr,obj);
fn();

// [0],{a:1}

虽然最后一点可能非常直观,但第一点给了我一些麻烦,因为我认为元素的顺序是重要因素而不是名称。因此,我想分享我在 React.

中关于在组件之间共享状态的实验

干杯。