美文网首页
外部js调用组件内的方法

外部js调用组件内的方法

作者: 苍老师的眼泪 | 来源:发表于2022-08-02 09:55 被阅读0次

比如我有一个模态框组件,这个组件在可以在请求时显示 “正在请求数据” 之类的提示,并且请求结束时关闭。
很显然要在其内部设置 state 控制显示与否
比如我设置了一个 axios 拦截器,这个拦截器需要在请求拦截器里面调用该模态框组件的方法,使其设置为显示状态,
并且在响应拦截器里面调用该模态框组件的方法,使其设置为不显示

第一种情况:class 组件
方法1(用ref调用组件的方法):组件内声明一个方法(比如叫做 toggle ),控制显示状态,同时需要一个 ref 引用该组件,
从而外部 js 可以通过 ref.current.toggle(显示状态)来控制模态框里面的 state
示例:

// 放置组件的地方
<Loading ref={LoadingRef}></Loading>
// 调用组件方法的地方
LoadingRef.current.update_show(true)

方法2(在生命周期函数将控制 state 的方法暴露):

class Loading extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            show: false
        }
    }

    componentDidMount() {
        document.body.appendChild(container)

        loading_handler = this.update_show
    }

    update_show = (show) => {
        this.setState({
            show,
        })
    }

    render() {
        const { show } = this.state
        return show ? ReactDOM.createPortal(<div id='loading_wrapper'>
            <div id='loading_content'>数据正在加载中...</div>
        </div>, container) : null
    }
}

第二种情况:函数式组件
方法(跟上面的方法2一样):这个时候用 ref 和 React.createRef 是行不通的,只能用 useEffect 里面设置将控制 state 的函数赋值给外面的一个变量,然后导出该变量,
需要调用该方法的地方导入即可使用
示例:

import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import  './loading.css'

const container = document.createElement('div')
let loadingHook = null

const Loading = props => {

    useEffect(() => {
        document.body.appendChild(container)
    })

    const [show, setShow] =  useState(false)

    useEffect(() => {
        console.log('setting loading hook')
        loadingHook = setShow
    }, [setShow])
        
    return show ? ReactDOM.createPortal(<div id='loading_wrapper'>
        <div id='loading_content'>数据正在加载中...</div>
    </div>, container) : null
    

}

export default Loading

export {
    loadingHook
}


相关文章

  • 外部js调用组件内的方法

    比如我有一个模态框组件,这个组件在可以在请求时显示 “正在请求数据” 之类的提示,并且请求结束时关闭。很显然要在其...

  • 小程序父、子组件之间方法调用

    一:父组件调用子组件的方法 父组件.wxml 父组件.js 子组件.js 一:子组件调用父组件的方法 父组件.wx...

  • JS exports构建自定义模块

    exports可以向外部文件暴露方法和属性,同过载单独js文件内写方法向外部暴露调用方法就能完成模块的定义。dem...

  • 微信小程序组件使用外部class

    1、组件内JS声明要使用外部的class名称 2、组件标签内使用class 3、页面引用组件时传入class名称 ...

  • Vue引入js变量,常量及文件

    1,变量引用外部js: vue实例文件 2,方法调用外部js: vue实例文件 3,变量引用外部js: vue实例文件

  • vue写公共方法在组件中使用

    第一种:直接在外部写一个文件,里面写方法在组件中调用 1.建一个外部文件 commen.js,例如写去除空对象方法...

  • Uniapp 开发备忘

    通过ref调用组件内方法 如果u-upload组件中有upload方法,我想在组建外调用,需要先声明组件的ref,...

  • 调用自定义组件中的方法

    创建自定义组件 .json .js 页面中引入自定义组件 .json .xml 页面中调用自定义组件的方法 .js

  • React.forwardRef 与useImperativeH

    React.forwardRef 与useImperativeHandle结合使用,就能调用方法组件内的方法, 父...

  • 说说 Vue.js 组件的高级特性

    1 递归 为组件设置 name 属性,这个组件就可以在自身的模板内递归调用自己。 html: js: 效果: 渲染...

网友评论

      本文标题:外部js调用组件内的方法

      本文链接:https://www.haomeiwen.com/subject/cbyswrtx.html