top | item 18288762

(no title)

thesunny | 7 years ago

contextType is a much needed shortcut but I wish instead of this:

  static contextType = SomeContext
they did something like:

  static contextMap = {
    form: FormContext,
    app: AppContext,
  }
as it seems limiting to only allow one context.

In the example above, the context values would be available in this.form and this.app

discuss

order

danabramov|7 years ago

This has been suggested in the RFC discussion (https://github.com/reactjs/rfcs/pull/65).

We intentionally didn't do it for several reasons:

* It adds extra object allocations on every render which adds up when your project grows

* It's harder to express in a type system (e.g. Flow or TypeScript)

You can use the low-level Consumer API to read multiple contexts but in this particular shortcut we're not going to support it.

pcmaffey|7 years ago

The other angle to solving this problem would be adding lifecycle methods to React.Context (instead of using render props), which could eliminate the need for multiple contexts. Making Consumer contexts more efficient & composable.

wereHamster|7 years ago

> It's harder to express in a type system (e.g. Flow or TypeScript)

I don't know about flow, but TypeScript is pretty flexible there. With mapped types you should be express anything you need.