reactjs - 当父属性更改时,FlatList 项目不会重新渲染

标签 reactjs react-native

我有一个具有 FlatList 的组件,并且 Prop 从父组件传递到其中,如下所示。

父组件

const Parent = (props) => {
  const [currentValue, setCurrentValue] = useState(0);
  // Changes are detected here
  console.log(currentValue)
  return (
    <FlatListContainer
      currentValue={currentValue}
      setCurrentValue={setCurrentValue}
    />
  );
};

FlatListContainer 组件

const FlatListContainer = (props) => {
  const { currentValue, setCurrentValue } = props;

  return (
    <FlatList
      data={data}
      keyExtractor={item => `${item.id}`}
      renderItem={({ item, index }) => (
        <OptionItem
          label={item.name}
          value={item.id}
          currentValue={currentValue}
          onPress={setCurrentValue}
        />
      )
      }
    />
  );
};

为了简单起见,我没有包括如何检索数据。

OptionItem如下。

OptionItem 组件

const OptionItem = (props) => {
  const { label, onPress, value, currentValue } = props;

  const _onPress = () => {
    onPress(value);
  };

  return (
    <TouchableOpacity
      activeOpacity={0.6}
      onPress={_onPress}
    >
      {/* CONTENT HERE */}
      <Text>{label}</Text>
      {value === currentValue ? 'Selected' : 'Not Selected'}
    </TouchableOpacity>
  );
};

当我在 OptionItem 组件中使用 console.log(currentValue) 时,我没有看到单击时值的变化。 如何在 FlatListContainer 和父组件中检测到更改。

如何让 OptionItem 组件检测到此更改并相应地更改其内容

最佳答案

extraData={currentValue} 添加到平面列表中。 Flatlist 仅在数据更改或 extraData 更改时重新渲染。

额外数据

用于告诉列表重新渲染的标记属性(因为它实现了 PureComponent)。如果您的任何 renderItem、Header、Footer 等函数依赖于 data prop 之外的任何内容,请将其粘贴在这里并以不变的方式对待它。

https://facebook.github.io/react-native/docs/flatlist.html#extraData

关于reactjs - 当父属性更改时,FlatList 项目不会重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58128200/

相关文章:

ios - 如何修复 pod 安装错误 glog 太旧或缺少 Windows 10 中的 native ios

javascript - 从 react 状态制作下拉菜单

javascript - 模块构建失败 : SyntaxError: Missing class properties transform when using webpack2

reactjs - 将附加参数传递给 React Ant Design Select 组件的 onSelect 方法

javascript - 未设置 native 基本输入引用

ios - iPhone X 上的 KeyboardAvoidingView 重叠屏幕

android - react 导航深度链接打开应用程序但不纠正页面

reactjs - 添加Redux后打包Electron React应用程序时无法调试错误,但在开发中可以完美运行

html - ReactJS如何创建罗马数字格式的列表 "ol"或 "ul"

reactjs - React/Redux 应用程序中的硬编码字符串/静态内容