React JS中函数的定义与调用及abpswarn函数转译求助
React 函数基础编写规范(定义+调用)
- 函数定义方式
- 普通函数:使用
function关键字声明,格式为function 函数名(形参列表) { 业务逻辑; return 返回值 },形参无需提前声明固定类型,JS为动态类型语言,可直接在函数体内对入参做业务校验。 - 箭头函数:更适配React组件内的上下文,写法为
const 函数名 = (形参列表) => { 业务逻辑 },不会绑定自身this,避免组件内的this指向异常。
- 普通函数:使用
- 函数调用规则
- 在事件绑定、其他函数执行链路、组件渲染逻辑中,直接通过
函数名(实参)即可触发执行,实参顺序需要和形参定义一一对应。
- 在事件绑定、其他函数执行链路、组件渲染逻辑中,直接通过
原4GL abpswarn 函数的React实现改写
原函数核心逻辑:在指定终端坐标位置弹出带固定样式的警告窗口,收集用户的操作选择,如果用户选择终止流程,则关闭窗口、清空屏幕内容、退出程序。
逐逻辑对应改写
- 参数映射:原代码中
p_row(行坐标)、p_col(列坐标)为小整数类型,在React浏览器环境中直接映射为弹窗的绝对定位坐标,可通过终端默认行高、列宽做像素换算,匹配原有的位置感知习惯,无需沿用原代码的SMALLINT类型声明逻辑。 - 窗口属性映射:
- 带边框、黄色主题:直接为弹窗容器添加对应CSS样式即可实现
- 表单区、注释区、消息区置于弹窗顶部,提示输入区置于底部:按照DOM结构分层组织弹窗内部元素
- 输入不自动换行:给弹窗文本容器添加
white-space: nowrap样式即可实现
- 流程逻辑映射:
- 原
continue_program的判断分支:替换为弹窗内的交互按钮触发的状态判断,拿到用户的操作选择 - 终止流程分支:依次执行关闭弹窗、重置页面全局状态(对应原CLEAR SCREEN)、中断后续业务执行(对应原EXIT PROGRAM)
- 流程走完后统一执行关闭弹窗操作
- 原
完整可运行代码示例
import { useState } from 'react' // 对应原abpswarn弹窗组件 const AbpsWarnModal = ({ row, col, onFlowConfirm }) => { // 弹窗样式完全匹配原窗口属性 const modalStyle = { position: 'absolute', top: row * 16, // 终端默认单像素行高换算为实际top值 left: col * 8, // 终端默认单字符列宽换算为实际left值 border: '1px solid #000', backgroundColor: '#ffff00', // 原黄色窗口属性 whiteSpace: 'nowrap', // 原输入不自动换行设置 padding: 8, zIndex: 1000 } return ( <div style={modalStyle}> {/* 顶部结构:表单区、注释区、消息区 */} <div className="form-zone"> {/* 对应原abpswarn表单的业务内容 */} </div> <div className="comment-zone"></div> <div className="message-zone"></div> {/* 底部结构:提示区 */} <div className="prompt-zone"> <button onClick={() => onFlowConfirm(true)}>继续执行</button> <button onClick={() => onFlowConfirm(false)}>退出程序</button> </div> </div> ) } // 对应原abpswarn函数 const abpswarn = (p_row, p_col) => { const [showModal, setShowModal] = useState(false) // 触发弹窗展示 setShowModal(true) // 处理流程判断逻辑 const handleFlow = (isContinue) => { // 用户选择不继续的分支 if (!isContinue) { setShowModal(false) // 对应原CLEAR SCREEN:重置页面全局状态 window.location.reload() // 对应原EXIT PROGRAM:中断程序执行 return } // 流程走完关闭弹窗 setShowModal(false) } // 渲染弹窗 return showModal && <AbpsWarnModal row={p_row} col={p_col} onFlowConfirm={handleFlow} /> } // 页面中调用示例 function BusinessPage() { return ( <div> {/* 点击触发abpswarn,传入行列坐标参数 */} <button onClick={() => abpswarn(8, 15)}>打开警告窗口</button> </div> ) }
内容的提问来源于stack exchange,提问作者sneha
相关产品推荐
相关产品推荐

