React组件传递回调函数报错:TypeError: handel_users_id is not a Function
问题分析与修复方案
你遇到的TypeError: handel_users_id is not a Function错误,结合代码来看主要有以下几个问题:
1. Usercontroller.js 中的无限循环与组件渲染逻辑问题
你在组件顶层直接调用了set_selected_user_id_("hello prop"),这会触发组件无限重渲染——每次执行setState都会让组件重新渲染,而重渲染又会再次执行这行代码,形成死循环。同时,这行代码会把selected_user_id_直接设为非空值,导致<Users>组件永远不会被渲染(因为渲染条件是selected_user_id_ === '')。
修复:删除这行直接调用的set_selected_user_id_,如果需要初始化值,直接在useState里设置:
const [selected_user_id_, set_selected_user_id_] = useState('hello prop');
或者如果是需要在组件挂载时执行,用useEffect包裹:
useEffect(() => { set_selected_user_id_("hello prop"); }, []); // 空依赖数组确保只执行一次
2. Users.js 中的未定义变量问题
你的onClick回调里使用了user.firebase_id,但user变量在Users组件中完全没有定义,这会触发另一个ReferenceError。你需要确保user是组件接收的props,或者在组件内部有正确的定义。
比如如果user是props的一部分:
function Users({ handel_users_id, user }) { // ... return ( <> <Button layout="link" size="icon" aria-label="Edit" onClick={() => handel_users_id(user.firebase_id)}> <EditIcon className="w-5 h-5 mx-3" aria-hidden="true" /> </Button> </> ) }
3. Users.js 中的函数定义语法错误
你在函数组件里用了类组件的函数赋值写法:handle_id = (id) => {},这在函数组件中是不合法的,必须用const声明函数:
const handle_id = (id) => { console.log(handel_users_id,"prop") }
其他检查点
- 确认
handel_users_id的拼写在所有地方完全一致(包括大小写),避免因拼写错误导致prop传递失败。 - 确保
Users组件确实在Usercontroller.js中被正确导入,没有导入错误。
内容的提问来源于stack exchange,提问作者Salman Amjad
相关产品推荐
相关产品推荐

