AntD List组件Actions数组条件渲染问题求助
解决Ant Design List组件actions数组中条件渲染按钮的问题
嘿,这个问题我之前也踩过坑!你直接在actions数组里用&&写条件判断的话,一旦条件不满足,数组里就会混入false这种假值,Ant Design的List组件会把这些假值当成有效元素处理,导致渲染异常或者出现空白占位。
这里有几个简单靠谱的解决办法:
方法1:提前构建actions数组(最清晰直观)
在renderItem函数里先创建一个空数组,把符合条件的操作按钮加进去,再添上固定的操作项,这样能完全避免假值混入的问题:
<List dataSource={items} itemLayout="horizontal" renderItem={item => { const actions = []; // 满足管理员且count>0时,添加up按钮 if (isAdmin && item.count > 0) { actions.push( <Button key="up-btn" onClick={() => this.moveItemUp(item.key)} > up </Button> ); } // 添加上固定的"more"链接 actions.push(<a key="more-link">more</a>); return ( <List.Item actions={actions}> {/* 你的List.Item内容 */} </List.Item> ); }} />
方法2:数组内用三元表达式+过滤假值
如果你更喜欢直接在actions数组里写逻辑,可以用三元表达式替代&&(不满足条件时返回null),再用filter(Boolean)把所有假值过滤掉:
<List dataSource={items} itemLayout="horizontal" renderItem={item => ( <List.Item actions={[ // 三元表达式:满足条件返回按钮,否则返回null isAdmin && item.count > 0 ? ( <Button key="up-btn" onClick={() => this.moveItemUp(item.key)} > up </Button> ) : null, <a key="more-link">more</a> ].filter(Boolean)} // 过滤掉null、false等无效值 > {/* 你的List.Item内容 */} </List.Item> )} />
额外提醒:onClick的写法问题
你原来的onClick={this.moveItemUp(item.key)}会导致组件一渲染就直接调用moveItemUp方法,而不是点击按钮时才执行!所以一定要用箭头函数包裹,改成onClick={() => this.moveItemUp(item.key)},这是个很容易忽略的小细节哦。
内容的提问来源于stack exchange,提问作者Quercode
相关产品推荐
相关产品推荐

