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

使用Material UI Drawer时传递setReplyDrawer给子组件触发点击事件报错:setReplyDrawer is not a function

解决React子组件接收props时报错“setReplyDrawer is not a function”

嘿,我一眼就看出问题出在哪了!你这个报错的核心原因是对React组件的props传递机制理解有误。

问题根源

React中,父组件传递给子组件的所有props都会被打包成一个单独的对象传递过去,但你在ReplyReview组件里把参数定义成了多个独立变量:

const ReplyReview = (name,replyDrawer,setReplyDrawer,first,setFirst) => { ... }

这就导致第一个参数name实际上接收到的是整个props对象,而后面的replyDrawer、setReplyDrawer等参数全都是undefined——你调用一个undefined的东西当函数,当然会报错啦!

解决方案

只需要把ReplyReview的参数改成对象解构的形式,就能正确从props对象里提取出你需要的属性了:

修改后的ReplyReview.jsx代码:

import { Button, Drawer, IconButton, InputBase, Paper, SwipeableDrawer } from '@mui/material'
import React, { useState } from 'react'
import { BsSearch } from "react-icons/bs";
import { AiOutlinePlusCircle } from "react-icons/ai";
import { BiArrowBack } from "react-icons/bi";
import './ReplyReview.css'

// 用对象解构接收props
const ReplyReview = ({name,replyDrawer,setReplyDrawer,first,setFirst}) => {
  const [buttonClicked, setButtonClicked] = useState(false)
  const drawerWidth = 500;
  console.log(replyDrawer,setReplyDrawer) // 现在这里能正确打印出值了
  return (
    <div className='reply-review-container'>
      <header>
        <Button onClick={()=>setReplyDrawer(false)}><BiArrowBack/></Button>
        <strong>Start messaging {name.name}</strong>
      </header>
    </div>
  )
}

export default ReplyReview

这样修改之后,你点击Back按钮时,setReplyDrawer(false)就能正常触发,关闭你的Material UI Drawer组件了,同时name也能正确拿到父组件传递过来的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:07:30