You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Hooks实现多选复选框:类组件转函数组件方案

React Native 多选复选框:类组件转Hooks函数组件实现

以下是转换后的函数组件代码,实现了多选复选框功能,点击按钮可获取所有选中项:

import React, { useState, useEffect } from 'react';
import { View, Text, CheckBox, TouchableOpacity, Button } from 'react-native';

export default function App() {
  // 原始水果列表(常量,无需放入状态)
  const Dts = ["Banana", "Apple", "Mango", "Watermelon"];
  // 存储带选中状态的水果数据
  const [data, setData] = useState([]);

  // 初始化格式化数据,替代componentDidMount
  useEffect(() => {
    const formatData = Dts.map((fruit, index) => ({
      id: index,
      key: fruit,
      checked: false
    }));
    setData(formatData);
  }, []);

  // 切换复选框选中状态
  const onChecked = (id) => {
    setData(prevData => 
      prevData.map(item => 
        item.id === id ? {...item, checked: !item.checked} : item
      )
    );
  };

  // 渲染水果复选列表
  const renderFruits = () => {
    return data.map((item) => (
      <TouchableOpacity 
        style={{ flexDirection: "row", alignItems: 'center', marginVertical: 8 }} 
        key={item.id} 
        onPress={() => onChecked(item.id)}
      >
        <CheckBox 
          value={item.checked} 
          onValueChange={() => onChecked(item.id)} 
        />
        <Text style={{ fontWeight: "bold", marginLeft: 8 }}>{item.key}</Text>
      </TouchableOpacity>
    ));
  };

  // 获取并展示选中的水果
  const getSelectedFruits = () => {
    const selectedFruits = data
      .filter(item => item.checked)
      .map(item => item.key);
    alert(selectedFruits.join(', '));
  };

  return (
    <View style={{ padding: 20 }}>
      {renderFruits()}
      <View style={{ marginTop: 20 }}>
        <Button onPress={getSelectedFruits} title="提交选中项" />
      </View>
    </View>
  );
}

关键改动说明

  • 用useState管理带选中状态的水果数据,替代类组件的state
  • 用useEffect在组件挂载时格式化原始数据,替代componentDidMount生命周期
  • 复选框状态更新遵循React状态不可变原则:通过map创建新数组,避免直接修改原状态数组
  • 选中项获取逻辑简化:通过filter筛选选中项,再用map提取水果名称,代码更简洁高效
  • 移除类组件的this绑定,直接使用函数组件的变量和函数,逻辑更清晰

内容的提问来源于stack exchange,提问作者ivanichi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:26:05