reasonml-old / reason-react

632 stars 41 forks source link

Type children key statically #39

Open chenglou opened 7 years ago

chenglou commented 7 years ago

We use currying for ref and key already. There might be some phantom types/GADT things we can use here to statically type the fact that children key exists. More info: https://github.com/reasonml/rehydrate/blob/6808bf1a19e701214e4456967b4aab155d79802c/src/reactRe.re#L60

Alternatively, @jordwalke can take the occasion to design this away without needing fancy types, with his OrderedMap idea (jordan can talk more about this).

The benefit is that this is the last feature we need in order to completely bypass createElement (which sets up the key warning, that we currently piggyback on), and make every JSX render twice faster.

IwanKaramazow commented 7 years ago

Why don't we throw in an OrderedSet as keys or something as an experiment? I'm wondering why we even have to supply keys to React. Is there a reason the reconciler can't make those up?

chenglou commented 7 years ago

We can have that; just that it's not clear whether it'll work out yet (not many people understand the semantics of nested arrays keys btw). In the meantime, having children statically typed would be great anyway! We can tackle on OrderedSet later too.

I'm thinking it's also not worse in terms of verbosity. Right now it's ReactRe.stringToElement and some others...

cristianoc commented 7 years ago

@chenglou can you explain the issues with nested arrays?