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

请问这里的x,y的实际意义是什么? #3

Open
baxtergu opened this issue Jul 14, 2020 · 5 comments
Open

请问这里的x,y的实际意义是什么? #3

baxtergu opened this issue Jul 14, 2020 · 5 comments
Labels
documentation Improvements or additions to documentation

Comments

@baxtergu
Copy link

const x = key2Id(get(node, 'type.$$typeof', node.type))
const y = getNodeId(node)

@CJY0208
Copy link
Owner

CJY0208 commented Jul 14, 2020

一个虚拟的 “横纵坐标” 概念,例如

一个节点的渲染路径是 A > B > C > D > E,那么,节点的纵深坐标就可以用此渲染路径来标识,记作 Y

此节点属于 E 的第 N 个子节点,那么它在此节点上的横向坐标为 N,记作 X

而纵深路径上的任何一个节点都有属于它自己的 X 坐标,那么,该节点的完整坐标为以下示例

A(1) > B(3) > C(2) > D(1) > E(3)

通常不应使用 “第几个” 来标识 X 坐标,因为顺序可能发生变化,所以合理的做法是使用 key 值,或者 babel 插件标记出的 _nk 值来表示

所以最终修正后,节点确切坐标为以下示例

A(d2fa) > B(of9x) > C(39ej) > D(_d3k) > E(m10x)

以上的 A、B、C 代表的是某一类组件,例如 Provider、Router、div 等

@CJY0208 CJY0208 added the documentation Improvements or additions to documentation label Jul 14, 2020
@baxtergu
Copy link
Author

一个虚拟的 “横纵坐标” 概念,例如

一个节点的渲染路径是 A > B > C > D > E,那么,节点的纵深坐标就可以用此渲染路径来标识,记作 Y

此节点属于 E 的第 N 个子节点,那么它在此节点上的横向坐标为 N,记作 X

而纵深路径上的任何一个节点都有属于它自己的 X 坐标,那么,该节点的完整坐标为以下示例

A(1) > B(3) > C(2) > D(1) > E(3)

通常不应使用 “第几个” 来标识 X 坐标,因为顺序可能发生变化,所以合理的做法是使用 key 值,或者 babel 插件标记出的 _nk 值来表示

所以最终修正后,节点确切坐标为以下示例

A(d2fa) > B(of9x) > C(39ej) > D(_d3k) > E(m10x)

以上的 A、B、C 代表的是某一类组件,例如 Provider、Router、div 等

感谢解答,解释的很清晰

@CJY0208
Copy link
Owner

CJY0208 commented Jul 14, 2020

比较有意思的还有 babel 标记 _nk 的这块,不过时间比较久了我也有点记不太清,可能存在一些小坑,但目前暂时没有遇到过

@baxtergu
Copy link
Author

比较有意思的还有 babel 标记 _nk 的这块,不过时间比较久了我也有点记不太清,可能存在一些小坑,但目前暂时没有遇到过

这行是不是要更新了,optional chaining进es标准了

if (get(node, 'callee.type') !== 'MemberExpression') {

https://github.com/yannickcr/eslint-plugin-react/blob/e3e767bd041988d9acb7713874c0632c68408347/lib/rules/jsx-key.js#L93

@CJY0208
Copy link
Owner

CJY0208 commented Jul 15, 2020

这行是不是要更新了,optional chaining进es标准了

if (get(node, 'callee.type') !== 'MemberExpression') {

可以使用 optional chaining,不过这样就需要对 babel 部分做 AST 处理来保证在不同环境中的兼容性了,目前不是必要的选择

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

No branches or pull requests

2 participants