Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Type children key statically #39

Open
chenglou opened this issue Feb 10, 2017 · 3 comments
Open

Type children key statically #39

chenglou opened this issue Feb 10, 2017 · 3 comments

Comments

@chenglou
Copy link
Contributor

chenglou commented Feb 10, 2017

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
Copy link
Contributor

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
Copy link
Contributor Author

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
Copy link

@chenglou can you explain the issues with nested arrays?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants