Я смотрел на функции React Hooks и у меня возникли некоторые сомнения по поводу того, как точно использовать useState и useEffect для рефакторинга существующего кода.
У меня есть, например, компонент старой школы, подобный этому:
class MyFunction extends React.Component{
state = {
count1: 0,
count2: 0
}
static getDerivedStateFromProps(nextProps, prevState) {
return {count1: nextProps.value1, count2: nextProps.value2}
}
handleChange1 = ({target: {value}}) => {
this.setState({count1: value});
this.props.onCount1Change(value);
}
handleChange2 = ({target: {value}}) => {
this.setState({count2: value});
this.props.onCount2Change(value);
}
componentDidUpdate(){
this.props.someRandomStuffs(this.state.count1, this.state.count2);
}
render(){
return (
<div>
<input type="text" value={this.state.count1} onChange={this.handleChange1} />
<input type="text" value={this.state.count2} onChange={this.handleChange2} />
</div>
)
}
}
Итак, я приготовил решение для его рефакторинга следующим образом.
function MyFunction(value1, value2, onCount1Change, onCount2Change, someRandomStuffs){
const [count1, setCount1] = useState(value1);
const [count2, setCount2] = useState(value2);
useEffect(() => someRandomStuffs(count1, count2));
function on1Change ({target: {value}}){
setCount1(value);
onCount1Change(value);
}
function on2Change ({target: {value}}){
setCount2(value);
onCount2Change(value);
}
return(
<div>
<input type="text" value={count1} onChange={on1Change} />
<input type="text" value={count2} onChange={on2Change} />
</div>
);
}
Достаточно ли близок рефакторинг?Я хотел бы знать, можно ли это сделать для рефакторинга других классов в моем проекте.