javascript - react内如何定义全局函数?
巴扎黑
巴扎黑 2017-04-11 09:45:01
[JavaScript讨论组]

小弟以前是专注写页面的前端,近期老大给了一个react的项目比较难懂,希望圈内大牛可以助我解惑!
问题如下:我现在的页面内嵌了一个iframe(公用登录框),iframe内会返回是否登录成功,若成功则在最外层页面返回一个值给callback函数如下:

那么这个callback函数就要在最外层页面的window下定义(是这样没错吧?),目的是判断是否有返回约定的值

若有则关闭iframe(将iframe的state改为隐藏)

可是我不知道应该如何在react中定义全局函数,项目中的app.jsx中的方法都被包裹在

这个类中,可以在这个类中定义吗?初学react与es6,很多不明白的地方,如果有没讲清楚的地方望提醒谢谢!

巴扎黑
巴扎黑

全部回复(2)
黄舟

首先App这个class(app.jsx里的class)是在最外层window 下定义的对吧?所以在登录iframe 内调用window.top.callback()实际上是调用最外层window 的全局方法window.callback(),是吧。

问题就变成了如何通过调用window.callback(),触发调用App组件实例的方法callback()

你当然可以直接在constructor 里写:

window.callback = () => _this.callback()

也可以通过自定义事件机制,在window.callback()里trigger 一个事件:

window.callback = () => eventBus.trigger('callback')

Appconstructor里监听这个事件:

constructor(props, _this) {
    super(props);
    eventBus.on('callback', () => _this.callback())
}

另外如果你们项目中有Flux 或者Redux,那就应该通过这些库来管理组件状态。

天蓬老师

我记得函数是不能卸载构造函数(constructor)里面的,定义全局函数,看你想怎么做,如果是定义一个在所有页面的方法,那么可以在common文件中建立一个公共方法文件,js或者jsx都可以,将方法写在里面,在使用import引入

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号