있을 것입니다 내가 처음 작업 부트 스트랩 popovers을 얻으려고 노력했다 문맥 이해를 누락 많이 (여전히 의심의 여지없이,이).
우선, 부트 스트랩 "Popover"플러그인은 실제로는 JQuery plugin입니다. 나는 그것이 모든 부트 스트랩 플러그인이 작동하는 방법이라고 생각하지만, 이것에 대한 어떤 부트 스트랩 소개 문서도 찾을 수 없었다. 그래서 이것은 popover()
메쏘드와 그것이 어디서 왔는지를 설명합니다.
아래에서는 필자가 React/Typescript/Webpack 스택의 컨텍스트에서 작동하도록하기 위해 필요한 내용을 간략히 설명했습니다.
다음은 웹 팩을 the Bootstrap doco으로 설정했다고 가정합니다.
webpack.config.js
이 부트 스트랩 문서와 같고 코드베이스 어딘가에 import 'bootstrap';
이 있다고 가정하면 원래 질문의 "Popover"및 "Tooltip"줄이 필요하지 않습니다. 당신은 그래서 JQuery와의 type 정의를 확장해야
"devDependencies": {
"@types/jquery": "3.2.15",
...
}
"dependencies": {
"bootstrap": "4.0.0-beta",
"jquery": "3.2.1",
"popper.js": "1.11.0",
...
}
: 당신이 $
을 가져 오른쪽 유형을 가질 수 있도록
당신은, 만약 이미 존재하지를 JQuery와 typings를 추가해야 그것은 this blog article by Netanel Basal에 따라 Popover 플러그인에 대해 알고 있습니다. 에서 typings.d.ts
(또는 프로젝트에서 의미가 곳), 다음 추가 :
// support for JQuery popover plugin from Bootstrap 4
interface JQuery {
popover() : any;
}
참고 그 정의는 당신이 정적으로 입력 된 방식으로 코드에서 작업 popovers를 얻기 위해 필요한 최소한입니다. Popover 비헤이비어를 사용자 정의 할 수 있도록 전달 매개 변수를 지원하려면 확장해야합니다. 또는 data
속성을 사용하여 doco의 Live example에 따라 이러한 매개 변수를 전달할 수 있습니다.
React 구성 요소 자체에서 질문에서 popover를 선언하는 JSX가 정상적으로 작동하는 것 같습니다.
질문에 따라, 당신은 팝 오버 방법 JQuery와 식별자를 가져온 다음 호출 할 필요는 팝 오버를 "초기화"다음
이
...
const $ = require('jquery');
...
componentDidMount(): void{
$('[data-toggle="popover"]').popover();
}
...
은 "수입 형태"didn't work for me, 그래서 require()
로했다 그것을 .
그 코드는 data-toggle="popover"
을 가진 요소에 대한 전체 HTML 페이지를 검색하고, 당신이 호출 할 수있는 popover()
방법 (즉, 전체 jQuery 플러그인의 부분)이있는 JQuery와 개체를 반환합니다.
팝업 속성이있는 요소에 popover()
이 호출되면 요소를 클릭 할 때 popover가 자동으로 표시됩니다 (Popover 관련 React 상태를 관리 할 필요가 없음).
그것은 위 그림과 같이 모든 popovers에 대한 전체 HTML 페이지를 검색하는 좋은 생각이 아니다 EDIT. 여러 React 구성 요소에 여러 개의 팝업이있는 복잡한 페이지에서는 각 구성 요소가 서로 popover()
옵션을 덮어 쓰게됩니다.
다음은 재사용 가능한 React 부트 스트랩 Popover 구성 요소에 대한 현재 해결책입니다.
이해하기 위해 타이프 라이터의 typings를 확장 더 popover options :
// support for JQuery popover plugin from Bootstrap 4
interface JQuery {
popover(options?: PopoverOptions) : any;
}
interface PopoverOptions {
container?: string | Element | boolean;
content?: string | Element | Function;
placement?: "auto" | "top" | "bottom" | "left" | "right" | Function;
title?: string | Element | Function;
...
}
만들기 Popover.tsx
같은 : 팝 오버의 위치와 관련
<Popover
popoverTitle="The popover title"
popoverContent="The popover content"
>
<span>
Click this to show popover.
</span>
</Popover>
주의 문제 :
export interface PopoverProps {
popoverTitle: string | Element | Function;
popoverContent: string | Element | Function;
}
export class Popover
extends PureComponent<PopoverProps, object> {
selfRef: HTMLSpanElement;
componentDidMount(): void{
$(this.selfRef).popover({
container: this.selfRef,
placement: "auto",
title: this.props.popoverTitle,
content: this.props.popoverContent,
});
}
render(){
return <span
ref={(ref)=>{if(ref) this.selfRef = ref}}
data-toggle="popover"
>
{this.props.children}
</span>;
}
}
그런 다음 같은 팝 오버를 사용 동적 콘텐츠 포함 : Bootstrap 4 - how does automatic Popover re-positioning work?