Back to all reviewers

Extract reusable hooks

logseq/logseq
Based on 2 comments
Other

When you identify React logic that handles complex state management or event handling patterns that could be reused across multiple components, extract it into a custom hook. This promotes code reusability, reduces duplication, and makes components more focused on their primary responsibilities.

React Other

Reviewer Prompt

When you identify React logic that handles complex state management or event handling patterns that could be reused across multiple components, extract it into a custom hook. This promotes code reusability, reduces duplication, and makes components more focused on their primary responsibilities.

For example, IME (Input Method Editor) composition handling is a common pattern that should be extracted:

(defn use-ime-composition []
  (let [*composing? (rum/use-ref false)]
    {:composing? (rum/deref *composing?)
     :on-composition-start #(rum/set-ref! *composing? true)
     :on-composition-end #(rum/set-ref! *composing? false)}))

;; Usage in component:
(rum/defc search-input [q matches]
  (let [{:keys [composing? on-composition-start on-composition-end]} (use-ime-composition)
        on-change-fn (fn [e]
                       (let [value (util/evalue e)
                             e-type (gobj/getValueByKeys e "type")]
                         (cond (= e-type "compositionstart") (on-composition-start)
                               (= e-type "compositionend") (on-composition-end))
                         (when-not composing?
                           (debounced-search))))]
    ;; component JSX...
    ))

This approach also helps identify and eliminate redundant local state when the same functionality is already handled by other mechanisms like global state updates or component properties.

2
Comments Analyzed
Other
Primary Language
React
Category

Source Discussions