React Native 更新值不会重新呈现(不使用useState)

ahy6op9u  于 2023-10-22  发布在  React
关注(0)|答案(1)|浏览(110)

我最近在面试中被问到这个问题,我无法回答。
我的问题是:
考虑下面的代码片段,其中包含两个按钮和一个文本

import { Text, StyleSheet, View, Button } from 'react-native';

let a = 0;

const incrementA = () => {
  console.log(`a => ${a}`);
  a += 1;
  console.log(`a = ${a}`);
};

export default function App() {
  let b = 0;

  const incrementB = () => {
    console.log(`b => ${b}`);
    b += 1;
    console.log(`b = ${b}`);
  };

  return (
    <View style={styles.container}>
      <View>
        <Text>{a}</Text>
        <Button title="Increment a" onPress={incrementA} />
      </View>
      <View>
        <Text>{b}</Text>
        <Button title="Increment b" onPress={incrementB} />
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    backgroundColor: '#ecf0f1',
    padding: 8,
  },
});

我被问到的是,在点击任何按钮,什么将在屏幕上的输出,在点击“增量a”按钮,它会更新屏幕上的a的值,同样的“增量b”按钮.
在给出错误的答案后,他告诉我,“a”的值将重新返回,但b的值不会。他还给了我useState的例子,它返回一个包含两个值的数组,第一个是值本身,第二个是setter函数来更新这个值,这里setter函数是从组件调用的,但存在于组件之外,所以他的结论是,如果我们更新组件之外的值,那么它将重新呈现,否则它不会。
我无法创建与下面提供的小吃相同,可以有人请解释这个完整的场景。
以下是我为测试它而创建的零食:https://snack.expo.dev/@jdarshan1210/gnarly-red-french-fries

gt0wga4j

gt0wga4j1#

好吧,看起来要么是你漏掉了什么,要么是面试官搞混了。由于ab都不是状态,因此更新它们中的任何一个都不会导致重新呈现。
现在,如果b是一个状态,用setter函数更新它将导致重新呈现。我怀疑这是真正的问题,这里的问题是,每当组件重新呈现时,a的显示值也将更新为当前值。

相关问题