Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在rxjs中将typescript中的目标设置为fromEvent()_Reactjs_Typescript_Compiler Errors_Rxjs - Fatal编程技术网

Reactjs 如何在rxjs中将typescript中的目标设置为fromEvent()

Reactjs 如何在rxjs中将typescript中的目标设置为fromEvent(),reactjs,typescript,compiler-errors,rxjs,Reactjs,Typescript,Compiler Errors,Rxjs,我正在使用“”库和typescript。 问题是,我不知道如何将一个简单按钮传递到rxjs 尝试此操作会使编译器抱怨: import React from 'react'; import * as rx from 'rxjs'; const RXComponent: React.FC = () => { rx.fromEvent(document.getElementById('dblbutton'), 'click') return ( <fo

我正在使用“”库和typescript。 问题是,我不知道如何将一个简单按钮传递到rxjs

尝试此操作会使编译器抱怨:

import React from 'react';
import * as rx from 'rxjs';

const RXComponent: React.FC = () => {

    rx.fromEvent(document.getElementById('dblbutton'), 'click')

    return (
        <form>
            <input type='button' id='dblbutton' value='Click me!'>
            </input>
        </form>
    )
}

export default RXComponent;
这在技术上是可行的,可以阻止编译器抱怨,但是如果我在localhost上打开实际的网站,我只会收到一堆引用库的错误


知道我做错了什么吗?

您可能可以使用
refs
回调模式执行类似操作,该模式会传递实际的元素引用,看看是否适合您:

import React from 'react';
import * as rx from 'rxjs';

const RXComponent: React.FC = () => {
    const buttonHandler = (buttonRef) => rx.fromEvent(buttonRef, 'click')

    return (
        <form>
            <input
               type='button'
               id='dblbutton'
               value='Click me!'
               ref={buttonHandler}>
            </input>
        </form>
    )
}

export default RXComponent;
从“React”导入React;
从“rxjs”导入*作为rx;
常量RX组件:React.FC=()=>{
常量buttonHandler=(buttonRef)=>rx.fromEvent(buttonRef,‘单击’)
返回(
)
}
导出默认RX组件;

我遇到了同样的问题,您只需要显式强制(或强制转换)类型,因此我为此制作了一个小助手

import * as Rx from 'rxjs'
import { FromEventTarget } from 'rxjs/internal/observable/fromEvent'

const
    mkEventTarget = (qs: string): FromEventTarget<Event> =>
        document.querySelector (qs) as FromEventTarget<Event>

  , evClicks: Rx.Observable<Event> = Rx.fromEvent (mkEventTarget ("#btn"), "click")

evClicks.subscribe (() => console.log ("Test"))
从“rxjs”导入*作为Rx
从'rxjs/internal/observable/fromEvent'导入{FromEventTarget}
常数
mkEventTarget=(qs:string):FromEventTarget=>
document.querySelector(qs)作为FromEventTarget
,evClicks:Rx.Observable=Rx.fromEvent(mkEventTarget(“#btn”),“click”)
evClicks.subscribe(()=>console.log(“测试”))

此外,您可能希望在componentDidMount()上获取此元素,因为它以前不存在
import * as Rx from 'rxjs'
import { FromEventTarget } from 'rxjs/internal/observable/fromEvent'

const
    mkEventTarget = (qs: string): FromEventTarget<Event> =>
        document.querySelector (qs) as FromEventTarget<Event>

  , evClicks: Rx.Observable<Event> = Rx.fromEvent (mkEventTarget ("#btn"), "click")

evClicks.subscribe (() => console.log ("Test"))