Skip to content

Commit f767be6

Browse files
authored
Merge pull request #1680 from reactjs/fix-missing-headings
add missing headings on hooks-faq
2 parents 486dac1 + cde52ae commit f767be6

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

content/docs/hooks-faq.md

+16-16
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,13 @@ function Counter() {
356356
const calculation = count * 100;
357357
const prevCalculation = usePrevious(calculation);
358358
// ...
359-
```
359+
```
360360

361361
It's possible that in the future React will provide a `usePrevious` Hook out of the box since it's a relatively common use case.
362362

363363
See also [the recommended pattern for derived state](#how-do-i-implement-getderivedstatefromprops).
364364

365-
### How do I implement `getDerivedStateFromProps`?
365+
### How do I implement `getDerivedStateFromProps`? {#how-do-i-implement-getderivedstatefromprops}
366366

367367
While you probably [don't need it](/blog/2018/06/07/you-probably-dont-need-derived-state.html), in rare cases that you do (such as implementing a `<Transition>` component), you can update the state right during rendering. React will re-run the component with updated state immediately after exiting the first render so it wouldn't be expensive.
368368

@@ -385,7 +385,7 @@ function ScrollView({row}) {
385385

386386
This might look strange at first, but an update during rendering is exactly what `getDerivedStateFromProps` has always been like conceptually.
387387

388-
### Is there something like forceUpdate?
388+
### Is there something like forceUpdate? {#is-there-something-like-forceupdate}
389389

390390
Both `useState` and `useReducer` Hooks [bail out of updates](/docs/hooks-reference.html#bailing-out-of-a-state-update) if the next value is the same as the previous one. Mutating state in place and calling `setState` will not cause a re-render.
391391

@@ -401,22 +401,22 @@ Normally, you shouldn't mutate local state in React. However, as an escape hatch
401401

402402
Try to avoid this pattern if possible.
403403

404-
### Can I make a ref to a function component?
404+
### Can I make a ref to a function component? {#can-i-make-a-ref-to-a-function-component}
405405

406406
While you shouldn't need this often, you may expose some imperative methods to a parent component with the [`useImperativeHandle`](/docs/hooks-reference.html#useimperativehandle) Hook.
407407

408-
### What does `const [thing, setThing] = useState()` mean?
408+
### What does `const [thing, setThing] = useState()` mean? {#what-does-const-thing-setthing--usestate-mean}
409409

410410
If you're not familiar with this syntax, check out the [explanation](/docs/hooks-state.html#tip-what-do-square-brackets-mean) in the State Hook documentation.
411411

412412

413-
## Performance Optimizations
413+
## Performance Optimizations {#performance-optimizations}
414414

415-
### Can I skip an effect on updates?
415+
### Can I skip an effect on updates? {#can-i-skip-an-effect-on-updates}
416416

417417
Yes. See [conditionally firing an effect](/docs/hooks-reference.html#conditionally-firing-an-effect). Note that forgetting to handle updates often [introduces bugs](/docs/hooks-effect.html#explanation-why-effects-run-on-each-update), which is why this isn't the default behavior.
418418

419-
### How do I implement `shouldComponentUpdate`?
419+
### How do I implement `shouldComponentUpdate`? {#how-do-i-implement-shouldcomponentupdate}
420420

421421
You can wrap a function component with `React.memo` to shallowly compare its props:
422422

@@ -431,7 +431,7 @@ It's not a Hook because it doesn't compose like Hooks do. `React.memo` is equiva
431431
`React.memo` doesn't compare state because there is no single state object to compare. But you can make children pure too, or even [optimize individual children with `useMemo`](/docs/hooks-faq.html#how-to-memoize-calculations).
432432

433433

434-
### How to memoize calculations?
434+
### How to memoize calculations? {#how-to-memoize-calculations}
435435

436436
The [`useMemo`](/docs/hooks-reference.html#usememo) Hook lets you cache calculations between multiple renders by "remembering" the previous computation:
437437

@@ -464,7 +464,7 @@ function Parent({ a, b }) {
464464

465465
Note that this approach won't work in a loop because Hook calls [can't](/docs/hooks-rules.html) be placed inside loops. But you can extract a separate component for the list item, and call `useMemo` there.
466466

467-
### How to create expensive objects lazily?
467+
### How to create expensive objects lazily? {#how-to-create-expensive-objects-lazily}
468468

469469
`useMemo` lets you [memoize an expensive calculation](#how-to-memoize-calculations) if the inputs are the same. However, it only serves as a hint, and doesn't *guarantee* the computation won't re-run. But sometimes need to be sure an object is only created once.
470470

@@ -525,7 +525,7 @@ function Image(props) {
525525
This avoids creating an expensive object until it's truly needed for the first time. If you use Flow or TypeScript, you can also give `getObserver()` a non-nullable type for convenience.
526526

527527

528-
### Are Hooks slow because of creating functions in render?
528+
### Are Hooks slow because of creating functions in render? {#are-hooks-slow-because-of-creating-functions-in-render}
529529

530530
No. In modern browsers, the raw performance of closures compared to classes doesn't differ significantly except in extreme scenarios.
531531

@@ -550,7 +550,7 @@ Traditionally, performance concerns around inline functions in React have been r
550550
551551
* Finally, the `useReducer` Hook reduces the need to pass callbacks deeply, as explained below.
552552
553-
### How to avoid passing callbacks down?
553+
### How to avoid passing callbacks down? {#how-to-avoid-passing-callbacks-down}
554554
555555
We've found that most people don't enjoy manually passing callbacks through every level of a component tree. Even though it is more explicit, it can feel like a lot of "plumbing".
556556
@@ -592,7 +592,7 @@ This is both more convenient from the maintenance perspective (no need to keep f
592592

593593
Note that you can still choose whether to pass the application *state* down as props (more explicit) or as context (more convenient for very deep updates). If you use context to pass down the state too, use two different context types -- the `dispatch` context never changes, so components that read it don't need to rerender unless they also need the application state.
594594

595-
### How to read an often-changing value from `useCallback`?
595+
### How to read an often-changing value from `useCallback`? {#how-to-read-an-often-changing-value-from-usecallback}
596596

597597
>Note
598598
>
@@ -662,15 +662,15 @@ function useEventCallback(fn, dependencies) {
662662
In either case, we **don't recommend this pattern** and only show it here for completeness. Instead, it is preferable to [avoid passing callbacks deep down](#how-to-avoid-passing-callbacks-down).
663663

664664

665-
## Under the Hood
665+
## Under the Hood {#under-the-hood}
666666

667-
### How does React associate Hook calls with components?
667+
### How does React associate Hook calls with components? {#how-does-react-associate-hook-calls-with-components}
668668

669669
React keeps track of the currently rendering component. Thanks to the [Rules of Hooks](/docs/hooks-rules.html), we know that Hooks are only called from React components (or custom Hooks -- which are also only called from React components).
670670

671671
There is an internal list of "memory cells" associated with each component. They're just JavaScript objects where we can put some data. When you call a Hook like `useState()`, it reads the current cell (or initializes it during the first render), and then moves the pointer to the next one. This is how multiple `useState()` calls each get independent local state.
672672

673-
### What is the prior art for Hooks?
673+
### What is the prior art for Hooks? {#what-is-the-prior-art-for-hooks}
674674

675675
Hooks synthesize ideas from several different sources:
676676

0 commit comments

Comments
 (0)