Skip to content

Commit 57d7225

Browse files
committed
Use direct imports of react where possible.
TypeScript still requires "import * as React from 'react'" if JSX components are declared.
1 parent 821ce2a commit 57d7225

File tree

4 files changed

+29
-30
lines changed

4 files changed

+29
-30
lines changed

src/components/Context.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as React from 'react'
1+
import { createContext } from 'react'
22
import type { Action, AnyAction, Store } from 'redux'
33
import type { Subscription } from '../utils/Subscription'
44

@@ -12,7 +12,7 @@ export interface ReactReduxContextValue<
1212
}
1313

1414
export const ReactReduxContext =
15-
/*#__PURE__*/ React.createContext<ReactReduxContextValue>(null as any)
15+
/*#__PURE__*/ createContext<ReactReduxContextValue>(null as any)
1616

1717
export type ReactReduxContextInstance = typeof ReactReduxContext
1818

test/components/Provider.spec.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/*eslint-disable react/prop-types*/
22

33
import * as React from 'react'
4-
import { Component, Dispatch } from 'react'
5-
import * as ReactDOM from 'react-dom'
4+
import { Component, Dispatch, StrictMode } from 'react'
5+
import { render, unmountComponentAtNode } from 'react-dom'
66
import { createStore } from 'redux'
77
import { Provider, connect, ReactReduxContext } from '../../src/index'
88
import * as rtl from '@testing-library/react'
@@ -312,18 +312,18 @@ describe('React', () => {
312312
})
313313

314314
it('works in <StrictMode> without warnings (React 16.3+)', () => {
315-
if (!React.StrictMode) {
315+
if (!StrictMode) {
316316
return
317317
}
318318
const spy = jest.spyOn(console, 'error').mockImplementation(() => {})
319319
const store = createStore(() => ({}))
320320

321321
rtl.render(
322-
<React.StrictMode>
322+
<StrictMode>
323323
<Provider store={store}>
324324
<div />
325325
</Provider>
326-
</React.StrictMode>
326+
</StrictMode>
327327
)
328328

329329
expect(spy).not.toHaveBeenCalled()
@@ -344,15 +344,15 @@ describe('React', () => {
344344
}
345345

346346
const div = document.createElement('div')
347-
ReactDOM.render(
347+
render(
348348
<Provider store={store}>
349349
<div />
350350
</Provider>,
351351
div
352352
)
353353

354354
expect(spy).toHaveBeenCalledTimes(0)
355-
ReactDOM.unmountComponentAtNode(div)
355+
unmountComponentAtNode(div)
356356
expect(spy).toHaveBeenCalledTimes(1)
357357
})
358358

test/components/hooks.spec.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
/*eslint-disable react/prop-types*/
22

33
import * as React from 'react'
4+
import { useState, useEffect, version as reactVersion } from 'react'
45
import { createStore } from 'redux'
56
import { Provider as ProviderMock, connect } from '../../src/index'
67
import * as rtl from '@testing-library/react'
78
import '@testing-library/jest-dom/extend-expect'
89
import type { AnyAction } from 'redux'
910

10-
const IS_REACT_18 = React.version.startsWith('18')
11+
const IS_REACT_18 = reactVersion.startsWith('18')
1112

1213
describe('React', () => {
1314
describe('connect', () => {
@@ -61,11 +62,11 @@ describe('React', () => {
6162
})
6263

6364
const component1 = (props: Omit<RootStateType, 'byId'>) => {
64-
const [state, setState] = React.useState({ list: props.list })
65+
const [state, setState] = useState({ list: props.list })
6566

6667
component1StateList = state.list
6768

68-
React.useEffect(() => {
69+
useEffect(() => {
6970
setState((prevState) => ({ ...prevState, list: props.list }))
7071
}, [props.list])
7172

test/typetests/react-redux-types.typetest.tsx

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/* eslint-disable @typescript-eslint/no-unused-vars, no-inner-declarations */
2-
import { Component, ReactElement } from 'react'
2+
import { createElement, Component, ReactElement, ReactNode } from 'react'
3+
import type { ComponentType } from 'react'
34
import * as React from 'react'
4-
import * as ReactDOM from 'react-dom'
5+
import { render } from 'react-dom'
56
import {
67
configureStore,
78
createSlice,
@@ -91,15 +92,15 @@ connect<ICounterStateProps, ICounterDispatchProps, {}, {}, CounterState>(
9192
)(Counter)
9293

9394
class App extends Component<any, any> {
94-
render(): React.ReactNode {
95+
render(): ReactNode {
9596
// ...
9697
return null
9798
}
9899
}
99100

100101
const targetEl = document.getElementById('root')
101102

102-
ReactDOM.render(
103+
render(
103104
<Provider store={store}>
104105
<App />
105106
</Provider>,
@@ -129,7 +130,7 @@ type AddTodoAction = ReturnType<typeof addTodo>
129130
declare var todoActionCreators: { [type: string]: (...args: any[]) => any }
130131
declare var counterActionCreators: { [type: string]: (...args: any[]) => any }
131132

132-
ReactDOM.render(
133+
render(
133134
<Provider store={store}>
134135
<MyRootComponent />
135136
</Provider>,
@@ -246,7 +247,7 @@ class TestComponent extends Component<TestProp, TestState> {}
246247
const WrappedTestComponent = connect()(TestComponent)
247248

248249
// return value of the connect()(TestComponent) is of the type TestComponent
249-
let ATestComponent: React.ComponentType<TestProp>
250+
let ATestComponent: ComponentType<TestProp>
250251
ATestComponent = TestComponent
251252
ATestComponent = WrappedTestComponent
252253

@@ -271,11 +272,8 @@ function HelloMessage(props: HelloMessageProps) {
271272
return <div>Hello {props.name}</div>
272273
}
273274
let ConnectedHelloMessage = connect()(HelloMessage)
274-
ReactDOM.render(
275-
<HelloMessage name="Sebastian" />,
276-
document.getElementById('content')
277-
)
278-
ReactDOM.render(
275+
render(<HelloMessage name="Sebastian" />, document.getElementById('content'))
276+
render(
279277
<ConnectedHelloMessage name="Sebastian" />,
280278
document.getElementById('content')
281279
)
@@ -324,7 +322,7 @@ namespace TestTOwnPropsInference {
324322
state: string
325323
}
326324

327-
class OwnPropsComponent extends React.Component<OwnProps & StateProps, {}> {
325+
class OwnPropsComponent extends Component<OwnProps & StateProps, {}> {
328326
render() {
329327
return <div />
330328
}
@@ -352,28 +350,28 @@ namespace TestTOwnPropsInference {
352350
)(OwnPropsComponent)
353351

354352
// @ts-expect-error
355-
React.createElement(ConnectedWithoutOwnProps, { anything: 'goes!' })
353+
createElement(ConnectedWithoutOwnProps, { anything: 'goes!' })
356354

357355
// This compiles, as expected.
358-
React.createElement(ConnectedWithOwnProps, { own: 'string' })
356+
createElement(ConnectedWithOwnProps, { own: 'string' })
359357

360358
// This should not compile, which is good.
361359
// @ts-expect-error
362-
React.createElement(ConnectedWithOwnProps, { missingOwn: true })
360+
createElement(ConnectedWithOwnProps, { missingOwn: true })
363361

364362
// This compiles, as expected.
365-
React.createElement(ConnectedWithTypeHint, { own: 'string' })
363+
createElement(ConnectedWithTypeHint, { own: 'string' })
366364

367365
// This should not compile, which is good.
368366
// @ts-expect-error
369-
React.createElement(ConnectedWithTypeHint, { missingOwn: true })
367+
createElement(ConnectedWithTypeHint, { missingOwn: true })
370368

371369
interface AllProps {
372370
own: string
373371
state: string
374372
}
375373

376-
class AllPropsComponent extends React.Component<AllProps & DispatchProp> {
374+
class AllPropsComponent extends Component<AllProps & DispatchProp> {
377375
render() {
378376
return <div />
379377
}

0 commit comments

Comments
 (0)