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

React新手求助:如何在Framer代码覆写中识别点击目标元素?

解决Framer中仅为点击的图片添加白色边框的问题

你当前代码用全局共享的store控制所有组件的border状态,导致点击任何一张图片,所有应用该覆写的组件都会同步变化。要实现仅给点击的元素添加边框,有两种实用方案:

方案1:每个组件独立维护选中状态(支持多选)

把全局store换成React的useState,让每个图片组件单独管理自身的选中状态,组件间状态互不干扰:

import type { ComponentType } from "react"
import { useState } from "react"

export function setBorder(Component): ComponentType {
    return (props) => {
        // 每个组件私有选中状态
        const [isSelected, setIsSelected] = useState(false)

        return (
            <Component
                {...props}
                animate={{
                    border: isSelected ? "3px solid rgba(255, 255, 255)" : ""
                }}
                onClick={() => {
                    setIsSelected(!isSelected)
                }}
            />
        )
    }
}

方案2:全局控制单选(仅一张图片有边框)

如果需要实现「同一时间仅选中一张图片」,可以在store中存储当前选中元素的唯一标识(Framer会自动给每个组件分配componentId并传入props),每个组件通过自身id判断是否需要显示边框:

import type { ComponentType } from "react"
import { createStore } from "https://framer.com/m/framer/store.js@^1.0.0"

const useStore = createStore({
    selectedId: null,
})

export function setBorder(Component): ComponentType {
    return (props) => {
        const [store, setStore] = useStore()
        const currentId = props.componentId
        const isSelected = store.selectedId === currentId

        return (
            <Component
                {...props}
                animate={{
                    border: isSelected ? "3px solid rgba(255, 255, 255)" : ""
                }}
                onClick={() => {
                    // 点击时切换选中状态:已选中则取消,未选中则设为当前组件id
                    setStore({
                        selectedId: isSelected ? null : currentId
                    })
                }}
            />
        )
    }
}

原代码失效的核心原因是全局store的状态被所有组件共享,任何组件触发状态变更都会同步影响所有应用该覆写的元素。上面的方案要么让组件独立管理状态,要么通过唯一标识精准区分目标元素,从而实现你需要的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:05:35