Menu组件会覆盖MenuItem的index属性

来源:6-6 日趋完美 - Menu 组件编码第三部分

tyler4400

2020-09-24

if(displayName === 'MenuItem') {
				return React.cloneElement(childElement, { index })
			} 

Menu组件的这段代码会覆盖子组件的index属性,使得MenuItem的可选index属性没有意义了

写回答

3回答

张轩

2020-09-26

同学你好 谢谢你发现了一个 bug,这里应该是有些问题的,我们可以从 childElement.props.index 拿出真实的 index,然后判断是否存在, childElement.props.index ? childElement.props.index : index. 给它赋值.

非常感谢同学的发现,我会修改代码,然后添加单测。


0
2
NioCo
1. 如果是直接在cloneElement的第二个参数里写{ childElement.props.index ? childElement.props.index : index. } 会报错,显示 notCallable, 只能写index: index.toString()这种形式. 2. 为啥要这么写呢,直接覆盖不好吗
2020-12-17
共2条回复

NioCo

2020-12-17

目的不就是覆盖这个子组件的index属性吗

1
0

不学会死掉

2024-01-25

我个人的理解,有三个index

1. 子组件menuItem中props上传来的index,作用是主动给某个menuItem设置index

2. 父组件menu中执行renderChildren时,map中利用children自己的index顺序初始化了index属性,这里按老师的优化写

 index: childElement.props.index ? childElement.props.index : index.toString()

3. context传入:menucontext.provider的index,这个index结合1中的index,在子组件menuitem中判断这个组件是否是当前选中的并添加active类,

'is-active': context.index === index

现在有一个场景是,某个menuitem是按顺序的第5个,默认index应该为4,那么如果主动设置这个组件props中的index为2的话,如果点击顺序第3个的menuitem,会不会同时给这两个menuitem都添加激活类is-active,或者两个menuitem的onSelect(index)会同时激发【因为一个是主动设置为2,另一个是位置原因默认格式化为2】,这点就比较混乱...


0
0

React18+TS高仿AntD从零到一打造组件库

设计,开发,测试,发布再到 CI/CD,从0到1造轮子

2123 学习 · 959 问题

查看课程