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

React使用Ref调用函数触发语法错误,请求排查解决

解决React+Bulma模态框激活的语法错误问题

错误提示

x Expected ',', got '.'
    ,-[E:\projects\Coding Stuff\MyThing\thingymajig\src\pages\MainMenu.js:13:1]
 13 |
 14 |
 15 |         function BeginTransaction(
 16 |                             inputRef.current.classList.add("is-active")
    :                                     ^
 17 |                       )

核心问题与修正点

1. 函数定义语法错误

你写的BeginTransaction函数不符合JS语法规范,正确的函数定义需要用花括号包裹函数体,而非直接把执行语句写在括号内。

2. 函数位置错误

React组件的return语句只能返回JSX元素,不能在其中定义函数。函数必须定义在组件内部、return语句之前。

3. 事件绑定错误

onClick={BeginTransaction()}会在组件渲染时立即执行函数,正确做法是传递函数引用onClick={BeginTransaction},确保点击时才触发函数。

4. React属性规范问题

React中需使用className替代原生的class属性,因为class是JavaScript关键字,直接使用会引发语法冲突。

5. 冗余标签问题

React组件无需手动添加<html>和<body>标签,这些标签应放在项目根HTML文件中,组件只需返回页面的局部内容。

修正后的完整代码

import 'bulma/css/bulma.css'
import { useRef } from "react"

export default function MainMenu() {
    const inputRef = useRef(null);

    // 正确定义函数,放在return语句之前
    function BeginTransaction() {
        // 添加空值判断,避免ref未挂载时触发报错
        if (inputRef.current) {
            inputRef.current.classList.add("is-active")
        }
    }

    return (
        <div>
            {/* 使用className替代class */}
            <div className="modal" ref={inputRef} id="WalletEntry">
                <div className="modal-background"></div>
                <div className="modal-content">
                    <div className="field">
                        <label className="label">Enter your wallet address</label>
                        <div className="control">
                            <input className="input" type="text" placeholder="Sender Address"/>
                            <button className="button">Enter Address</button>
                        </div>
                        <button className="button">Go back to selection</button>
                    </div>
                </div>
            </div>

            <div className="tile is-ancestor">
                <div className="tile">
                    <div className="tile is-10 is-vertical is-parent">
                        <div className="is_child box is-danger">
                            <h3>Ethereum Mainnet</h3>
                            <figure>
                                {/* 传递函数引用,而非立即执行 */}
                                <input onClick={BeginTransaction} type="image" src="Images/eth.jpg" />
                            </figure>
                            <div>
                                Advanced deposits with uniswap
                            </div>
                        </div>
                    </div>
                </div>

                <div className="tile">
                    <div className="tile is-10 is-vertical is-parent">
                        <div className="is_child box is-danger">
                            hello
                            <img src="https://bulma.io/images/placeholders/128x128.png"/>
                        </div>
                    </div>
                </div>

                <div className="tile">
                    <div className="tile is-10 is-vertical is-parent">
                        <div className="is_child box is-danger">
                            hello
                            <img src="https://bulma.io/images/placeholders/128x128.png"/>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    )
}

额外添加了inputRef.current的空值判断,避免组件未完全挂载时调用classList引发报错,提升代码健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:45:23