Skip to content

Refactor: Convert withState HOC to use hooks internally#73990

Closed
nextdimension wants to merge 1 commit into
WordPress:trunkfrom
nextdimension:refactor/compose-withstate-to-hooks
Closed

Refactor: Convert withState HOC to use hooks internally#73990
nextdimension wants to merge 1 commit into
WordPress:trunkfrom
nextdimension:refactor/compose-withstate-to-hooks

Conversation

@nextdimension
Copy link
Copy Markdown

What?

Contributes to #22890

Convert the withState higher-order component to use hooks internally.

Why?

This PR contributes to the ongoing effort to modernize the Gutenberg codebase by converting React class components to function components with hooks, as tracked in #22890.

The withState HOC is deprecated but still used in parts of the codebase. This change modernizes its internal implementation while maintaining the same external API.

How?

  • Replace class-based WrappedComponent with function component
  • Replace this.state with useState hook
  • Remove constructor and manual setState binding
  • Update test file to use function components

Files changed:

  • packages/compose/src/higher-order/with-state/index.js
  • packages/compose/src/utils/create-higher-order-component/test/index.js

Testing Instructions

  1. Run the compose package tests:
    npm run test:unit -- --testPathPattern="packages/compose/src"
    
  2. Verify all tests pass, particularly with-state tests

Testing Instructions for Keyboard

N/A - This is an internal implementation change with no direct UI impact. The external API remains unchanged.

Screenshots or screencast

N/A - Internal refactoring with no visual changes.

@github-actions
Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Unlinked Accounts

The following contributors have not linked their GitHub and WordPress.org accounts: @[email protected].

Contributors, please read how to link your accounts to ensure your work is properly credited in WordPress releases.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Unlinked contributors: [email protected].


To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@github-actions
Copy link
Copy Markdown

Warning: Type of PR label mismatch

To merge this PR, it requires exactly 1 label indicating the type of PR. Other labels are optional and not being checked here.

  • Required label: Any label starting with [Type].
  • Labels found: .

Read more about Type labels in Gutenberg. Don't worry if you don't have the required permissions to add labels; the PR reviewer should be able to help with the task.

@github-actions
Copy link
Copy Markdown

👋 Thanks for your first Pull Request and for helping build the future of Gutenberg and WordPress, @nextdimension! In case you missed it, we'd love to have you join us in our Slack community.

If you want to learn more about WordPress development in general, check out the Core Handbook full of helpful information.

@github-actions github-actions Bot added the First-time Contributor Pull request opened by a first-time contributor to Gutenberg repository label Dec 13, 2025
@Mamaduka
Copy link
Copy Markdown
Member

The withState HoC is deprecated; there's no need to modernize it.

@Mamaduka Mamaduka closed this May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

First-time Contributor Pull request opened by a first-time contributor to Gutenberg repository

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants