javascript - 从反应原生组件调用javascript函数
问题描述
实际上我是新手,我正在调用单例类中的 javascript 函数。我想从构造函数的另一个反应本机组件中调用此函数。但是如果我尝试调用,它不会调用该函数。
代码:
export default class CustomScreen extends React.Component {
constructor(){
LoginUtil.getInstance().getLoginToken() // ==> not working
}
}
export default class LoginUtil {
static instance = null;
static createInstance() {
var object = new LoginUtil();
return object;
}
static getInstance () {
if (!LoginUtil.instance) {
LoginUtil.instance = LoginUtil.createInstance();
}
return LoginUtil.instance;
}
getLoginToken(){
return "token"
}
}
解决方案
JavaScript 中单例模式的实现方式是利用导出
像这样:
// LoginUtils.js
class LoginUtil {
constructor() {
// Only called once
this.token = 'initial';
}
setLoginToken(token) {
this.token = token;
}
getLoginToken(){
return this.token;
}
}
export default new LoginUtil();
诀窍是在导出实例时,它将处理单个实例并避免编写用于实例化的样板代码。
然后在您的组件文件中执行以下操作:
import loginUtils from './LoginUtils';
export default class CustomScreen extends React.Component {
constructor(){
const token = loginUtils.getLoginToken()
}
}
编辑:
您可能无法正常工作的原因是您需要添加super()
组件构造函数作为第一条语句:
class CustomScreen extends React.Component {
constructor(){
super();
LoginUtil.getInstance().getLoginToken();
}
...
}
class CustomScreen extends React.Component {
constructor(){
super()
this.state = { token: LoginUtil.getInstance().getLoginToken() };
}
render() {
return <p>Token: {this.state.token}</p>
}
}
class LoginUtil {
static instance = null;
static createInstance() {
var object = new LoginUtil();
return object;
}
static getInstance () {
if (!LoginUtil.instance) {
LoginUtil.instance = LoginUtil.createInstance();
}
return LoginUtil.instance;
}
getLoginToken(){
return "token-test"
}
}
ReactDOM.render(<CustomScreen />, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- c# - 如何有效地处理从 Listview 的数据模板中生成的事件
- ruby-on-rails - Rails:当我们需要在循环内查询关联时,如何删除 n+1 查询?
- php - 使用 SQL 更改 wordpress 旧图像路径 url 不会反映在我的数据库中
- java - 执行命令时如何获取所有错误?
- azure - 如何使用 powershell 找出 Azure VM 使用的 Windows 版本?
- pyspark - 如何使用 Map/Reduce 或任何其他方法查找 rdd 的每列的 MIN 和 MAX
- python - 在 python 中合并 2 个模型对象并提供未显示在一行中的数据(使用数据表列出来自 db 的数据)
- c# - 捕获不是类型的异常
- javascript - Vue.js $emit 事件触发但什么也没发生
- assembly - 尝试使用 int 13h ah=02h 加载扇区时,如何修复错误“找不到媒体类型”?