【问题标题】:Variable doesn't return from the function. (ReferenceError: Can't find variable: list2)变量不从函数返回。 (参考错误:找不到变量:list2)
【发布时间】:2021-05-12 15:09:49
【问题描述】:

我是 React Native 的新手。我需要返回 list2 的值来运行程序的其余部分。但它不会返回。我知道这是因为我使用了在其余代码之后运行的 useEffect。但我不知道如何返回变量(list2)。

function contacts_list(data) {
  var list = []
  var list2 = ''
  for(var i=0; i<data.length; i++) {
    list.push(data[i]['name'])
    list2 = (list2 + "<Picker.Item label= \"" + data[i]['name'] + "\" " + " value= \"" + data[i]['name'] + "\" />")
  }
  //console.log(list2)
  return list2
}


export default function App() {
  useEffect(() => {
    (async () => {
      const { status } = await Contacts.requestPermissionsAsync();
      if (status === 'granted') {
        const { data } = await Contacts.getContactsAsync({
          fields: [Contacts.Fields.Emails],
        });

        if (data.length > 0) {
          contact = data[0];
          //console.log(data)
          contacts_list(data)
        }
      }
    })();
  }, [])

  console.log(list2)

【问题讨论】:

  • 您在某处有setState 电话吗?
  • 没有。我没有 setState
  • 你为什么不把返回值放在这样的变量中:var variables = contacts_list(data)?
  • 那行得通...但我无法从 useEffect 函数中获得价值

标签: reactjs react-native react-hooks expo


【解决方案1】:

我不知道 react-native 与 react 有多少相似之处。我解释了这段代码将如何在反应应用程序中工作,希望你能找到解决方案。 首先,useEffect 返回的唯一内容是在组件卸载时将调用的清理函数(您可以在 react doc 中了解更多信息),因此如果您需要数据,则应将其存储在 useEffect 之外的变量中。 其次,仅在 2 件事情发生变化时重新渲染组件,您的组件道具之一或您的状态之一(并且在默认行为中,当组件的父级重新渲染时)。 所以你需要做的是这样的:

export default function App() {
const [ state, setState ] = useState ('');

  useEffect(() => {
    (async () => {
      ... rest of code

        if (data.length > 0) {
          contact = data[0];
          setState(contacts_list(data))
        }
      }
    })();
  }, [])

rest of your code ....

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多