base abstract trigger component for react
npm install rc-triggerReact Trigger Component
[![NPM version][npm-image]][npm-url]
[![build status][github-actions-image]][github-actions-url]
[![Test coverage][coveralls-image]][coveralls-url]
[![Dependencies][david-image]][david-url]
[![DevDependencies][david-dev-image]][david-dev-url]
[![npm download][download-image]][download-url]
[![bundle size][bundlephobia-image]][bundlephobia-url]
[![dumi][dumi-image]][dumi-url]
[npm-image]: http://img.shields.io/npm/v/rc-trigger.svg?style=flat-square
[npm-url]: http://npmjs.org/package/rc-trigger
[github-actions-image]: https://github.com/react-component/trigger/workflows/CI/badge.svg
[github-actions-url]: https://github.com/react-component/trigger/actions
[circleci-image]: https://img.shields.io/circleci/react-component/trigger/master?style=flat-square
[circleci-url]: https://circleci.com/gh/react-component/trigger
[coveralls-image]: https://img.shields.io/coveralls/react-component/trigger.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/react-component/trigger?branch=master
[david-url]: https://david-dm.org/react-component/trigger
[david-image]: https://david-dm.org/react-component/trigger/status.svg?style=flat-square
[david-dev-url]: https://david-dm.org/react-component/trigger?type=dev
[david-dev-image]: https://david-dm.org/react-component/trigger/dev-status.svg?style=flat-square
[download-image]: https://img.shields.io/npm/dm/rc-trigger.svg?style=flat-square
[download-url]: https://npmjs.org/package/rc-trigger
[bundlephobia-url]: https://bundlephobia.com/result?p=rc-trigger
[bundlephobia-image]: https://badgen.net/bundlephobia/minzip/rc-trigger
[dumi-image]: https://img.shields.io/badge/docs%20by-dumi-blue?style=flat-square
[dumi-url]: https://github.com/umijs/dumi

Include the default styling and then:
``js
import React from 'react';
import ReactDOM from 'react-dom';
import Trigger from 'rc-trigger';
ReactDOM.render((
popup={popup}
popupAlign={{
points: ['tl', 'bl'],
offset: [0, 3]
}}
>
hover
), container);
`
| 
IE / Edge | 
Firefox | 
Chrome | 
Safari | 
Electron |
| --- | --- | --- | --- | --- |
| IE11, Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
http://localhost:9001
online example: http://react-component.github.io/trigger/
``
npm install
npm start
| name | type | default | description |
|---|---|---|---|
| alignPoint | bool | false | Popup will align with mouse position (support action of 'click', 'hover' and 'contextMenu') |
| popupClassName | string | additional className added to popup | |
| forceRender | boolean | false | whether render popup before first show |
| destroyPopupOnHide | boolean | false | whether destroy popup when hide |
| getPopupClassNameFromAlign | getPopupClassNameFromAlign(align: Object):String | additional className added to popup according to align | |
| action | string[] | ['hover'] | which actions cause popup shown. enum of 'hover','click','focus','contextMenu' |
| mouseEnterDelay | number | 0 | delay time to show when mouse enter. unit: s. |
| mouseLeaveDelay | number | 0.1 | delay time to hide when mouse leave. unit: s. |
| popupStyle | Object | additional style of popup | |
| prefixCls | String | rc-trigger-popup | prefix class name |
| popupTransitionName | String|Object | https://github.com/react-component/animate | |
| maskTransitionName | String|Object | https://github.com/react-component/animate | |
| onPopupVisibleChange | Function | call when popup visible is changed | |
| mask | boolean | false | whether to support mask |
| maskClosable | boolean | true | whether to support click mask to hide |
| popupVisible | boolean | whether popup is visible | |
| zIndex | number | popup's zIndex | |
| defaultPopupVisible | boolean | whether popup is visible initially | |
| popupAlign | Object: alignConfig of dom-align | popup 's align config | |
| onPopupAlign | function(popupDomNode, align) | callback when popup node is aligned | |
| popup | React.Element | function() => React.Element | popup content | |
| getPopupContainer | getPopupContainer(): HTMLElement | function returning html node which will act as popup container | |
| getDocument | getDocument(): HTMLElement | function returning document node which will be attached click event to close trigger | |
| popupPlacement | string | use preset popup align config from builtinPlacements, can be merged by popupAlign prop | |
| builtinPlacements | object | builtin placement align map. used by placement prop | |
| stretch | string | Let popup div stretch with trigger element. enums of 'width', 'minWidth', 'height', 'minHeight'. (You can also mixed with 'height minWidth') |
``
npm test
npm run chrome-test
``
npm run coverage
open coverage/ dir
After React 16, you won't access popup element's ref in parent component's componentDidMount, which means following code won't work.
`javascript
class App extends React.Component {
componentDidMount() {
this.input.focus(); // error, this.input is undefined.
}
render() {
return (
popup={
Consider wrap your popup element to a separate component:
`javascript
class InputPopup extends React.Component {
componentDidMount() {
this.props.onMount();
} render() {
return (
);
}
}class App extends React.Component {
handlePopupMount() {
this.input.focus(); // error, this.input is undefined.
}
render() {
return (
action={['click']}
popup={ this.input = node} onMount={this.handlePopupMount} />}
>
)
}
}
``rc-trigger is released under the MIT license.