From 8c897268778ad9918a5ddff5213f01f9d420a989 Mon Sep 17 00:00:00 2001 From: Alexander Soldatov Date: Fri, 27 Mar 2020 17:24:34 +0300 Subject: [PATCH] feat(button): remove unsafe method (#1039) --- src/button/button.tsx | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/button/button.tsx b/src/button/button.tsx index d891edae61..8828944b76 100644 --- a/src/button/button.tsx +++ b/src/button/button.tsx @@ -177,10 +177,16 @@ export type ButtonProps = DeepReadonly<{ }>; +type ButtonState = { + focused: boolean; + hovered: boolean; + pressed: boolean; +} + /** * Компонент кнопки (да, она нажимается!). */ -export class Button extends React.PureComponent { +export class Button extends React.PureComponent { protected cn = createCn('button'); static defaultProps: Partial = { @@ -190,6 +196,17 @@ export class Button extends React.PureComponent { formNoValidate: false }; + static getDerivedStateFromProps(nextProps: ButtonProps): Partial | null { + if (nextProps.disabled) { + return { + hovered: false, + focused: false + }; + } + + return null; + } + state = { focused: false, hovered: false, @@ -198,16 +215,6 @@ export class Button extends React.PureComponent { private control: HTMLButtonElement | HTMLSpanElement; - // eslint-disable-next-line camelcase - UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.disabled) { - this.setState({ - hovered: false, - focused: false - }); - } - } - render() { const isButton = this.props.tag !== 'span';