![](/img/trans.png)
[英]How can I refactor this ASYNC call in my react component to make it more readable?
[英]How can I refactor my stateful React component?
我有一個有狀態的Key
組件,它表示鍵盤中的鍵,如下所示:
import React from 'react';
class Key extends React.Component {
constructor(props) {
super(props);
this.state = {
id: props.id,
customClass: props.customClass,
value: props.value,
onAction: props.onAction,
active: false
};
this.handleAction = this.handleAction.bind(this);
this.resetActiveState = this.resetActiveState.bind(this);
}
handleAction(e) {
e.preventDefault();
this.setState ({
active: true
});
this.state.onAction(this.state.value);
//remove key pressed effect after 150 ms by resetting active state
_.delay(() => this.resetActiveState() , 150);
}
resetActiveState() {
this.setState ({
active: false
});
}
render() {
//conditionalProps is empty when active is false.
let conditionalProps = {};
let className = `default-btn ${this.state.customClass}`;
let displayValue = this.state.value;
//enable css attribute selector
if (this.state.active){
conditionalProps['data-active'] = '';
}
return (
<button id={this.state.id} key={this.state.id} className={className}
data-value={this.state.value} {...conditionalProps} onTouchStart={this.handleAction}>
{displayValue}
</button>
);
}
}
Key.defaultProps = {
customClass: '',
onAction: (val) => {}
};
export default Key;
onTouchStart
用於檢測觸摸事件。
onTouchStart
處理程序將active
狀態更改為true
。
Component
使用適當的CSS重新渲染以提供按鍵效果。
150ms之后,使用resetActiveState()
將active
狀態設置為false。
組件重新渲染,而沒有單擊效果css。
conditionalProps
屬性用於有條件地添加css樣式(使用css屬性選擇器),以在呈現的組件中實現“按鍵”外觀。
這可以按預期工作,但是我想知道是否可以重構該組件,以便可以將邏輯提取到父組件,然后可以使用Key組件進行擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.