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

React Native:如何在onPress中切换双图标并修复setToggleIcon报错

问题分析与解决方案

报错TypeError: setToggleIcon is not a function的核心原因是**useState返回的是数组而非对象**,你错误使用了对象解构语法;同时还存在handleClick未执行的问题。以下是具体修复步骤:


1. 修复useState解构错误

useState返回的是「状态变量 + 更新函数」组成的数组,必须用数组解构:

// 错误写法
const { toggleIcon, setToggleIcon } = useState(false);

// 正确写法
const [toggleIcon, setToggleIcon] = useState(false);

2. 修复handleClick调用问题

在onPress回调中,需要调用函数而非仅引用:

<ButtonDetail
    onPress={() => {
        toggle(item.id);
        handleClick(); // 添加()执行函数
    }}>
    {toggleIcon ? (
        <AntDesign name="downcircle" size={17} color="green" />
    ) : (
        <AntDesign name="upcircle" size={17} color="green" />
    )}
</ButtonDetail>

3. (推荐优化)复用上下文状态,避免冗余

既然已经通过ToggleContext管理展开状态,可直接用该状态判断图标,无需单独维护toggleIcon,避免状态不一致:

const { toggle, showAccordion } = useContext(ToggleContext);
// 移除冗余的useState:const [toggleIcon, setToggleIcon] = useState(false);

<View>
    {!item.hasOwnProperty("animals") && (
        <ButtonDetail
            onPress={() => toggle(item.id)}>
            {/* 根据当前item是否在展开列表中切换图标 */}
            {showAccordion.includes(item.id) ? (
                <AntDesign name="downcircle" size={17} color="green" />
            ) : (
                <AntDesign name="upcircle" size={17} color="green" />
            )}
        </ButtonDetail>
    )}
</View>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:05:28