【问题标题】:For i loop running infinitely React NativeFor i 循环无限运行 React Native
【发布时间】:2022-01-05 21:04:40
【问题描述】:

我目前正在用 React Native 编写一个应用程序,其中我有一些保存文件存储在一个数组中。在下面的代码中,我遍历这些保存并创建数据的 JSON 版本,以便使用单独的函数将其传输到 XML。问题是代码可以工作,但可以无限运行,而不是创建几个按钮,而是创建一个永无止境的数量(我附上了截图)。任何帮助都将不胜感激,因为我已经坚持了几天并且已经尝试了一切!

export function sessionsViewer({ navigation, route }) {

  const [dataResults, setDatResults] = useState({ type: "View", children: [{}] })

  async function getDataResults() {
    var previousSaves = await getDataJSON('saves')
    for(let i = 0; i < previousSaves.length; i++){
      let prevSave = previousSaves[i]
      let json = {
        'type': 'View',
        'children': [
          {
            'type': 'Touchable',
            'styles': [styles.startButton, { width: widthPercentageToDP(90) }],
            'onpress': () => { alert('You pressed me!' + JSON.stringify(prevSave.scores)) },
            'children': [
              {
                'type': 'Text',
                'text': prevSave.technique + ': ' + prevSave.datetime,
                'styles': styles.buttonTXT
              }
            ]
          }
        ]
      }
      let prevDataResults = dataResults
      prevDataResults.children.push(json)
      setDatResults({ ...prevDataResults })
    }
  }

Image showing infinite list

【问题讨论】:

    标签: javascript arrays react-native loops


    【解决方案1】:

    您可以添加一个全局布尔变量,例如let control = false;。并在调用 setDatResults 之前设置为 true。

    control = true;
    setDatResults({ ...prevDataResults })
    control = false;
    

    如果我们在 getDataResults 函数的开头控制这个变量。 这样可以防止无限循环。

    async function getDataResults() {
        if (control) {
           return;
        }
    

    【讨论】:

    • 您好,感谢您的回复。我已经尝试过了,但它似乎没有用,所以我将变量实现为 React 钩子,并且做得更好,但它现在只是复制而不是无限循环。我希望有两个按钮,因为我有两个保存,但实际上有四个。知道它为什么会这样做吗?
    • 你能不能试着把“setDatResults({ ...prevDataResults })”放到“for loop”之外(循环之后),把“let prevDataResults = dataResults”放到“for loop”之前?
    • 你好,我试过了,但它没有用,但我现在通过将它全部传递给 useEffect 来修复它。感谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2018-01-11
    • 2020-02-21
    • 2018-05-08
    相关资源
    最近更新 更多