Итак, я начал использовать ловушки React. Я экспериментировал с API уже некоторое время. мне очень нравится идея доведения состояния до функциональных компонентов. но есть одна вещь, которая продолжает беспокоить меня, и это не чувствует себя хорошо в кишечнике, когда я пытаюсь использовать это. Я попытался опубликовать на RFCs
, но сейчас там слишком людно. там все кажется потерянным.
Вот фрагмент кода из моего примера.
import React, { useState } from "react";
function Counter() {
const [counterState,incrementCounterState] = useCommontState(0);
function doSomething (){
// does something and then calls incrementCounterState
// with the updated state.
}
return (
<div>
<p>{counterState}</p>
<button onClick={incrementCounterState}>increase</button>
....
.... // some jsx calling local scoped functions.
....
</div>
);
}
function useCommontState(defaultValue){
var [state, setState] = useState(0);
function increment(){
setState(defaultValue+=1);
}
return [state, increment]
}
export default Counter;
Я могу легко извлечь state
и setState
методы и создать пользовательский hook
, но моя проблема с локальными функциями, которые используются компонентом. так как состояние теперь является частью компонента, будут случаи, когда некоторая логика решит, что делать дальше с состоянием.
Кроме того, при повторной визуализации компонента при изменении состояния все инициализируется повторно. что является моей проблемой Я знаю, что useState
имеет свой собственный способ решения проблемы. но моя проблема с моими собственными функциями. обработчики кликов. на событиях изменения, обратных вызовах для дочерних компонентов и т. д. - все это будет переинициализироваться при каждом рендеринге компонента. это не подходит мне.
Есть ли способы, которыми мы можем обойти это. это новый API. мы даже не уверены, превратится ли это в react 17
. но кто-нибудь сталкивался с каким-нибудь лучшим способом сделать это?