javascript - "or"运算符在 react 的渲染方法中没有按预期工作

标签 javascript reactjs

我正在尝试使用“或”||我的渲染方法中的运算符像这样使用react(目的是决定是否显示元素)

<div className="item-actions">
    {this.state.addedMovieTag.filter(function( obj ) {
        return obj.trivia_id === item.id;
    }).length > 0 || this.state.addedPersonTag.filter(function( obj ) {
        return obj.trivia_id === item.id;
    }).length > 0  &&  <span className="fa fa-edit" onClick={this.saveChanges.bind(this, item)}></span>}
    <span className="fa fa-trash"></span>
</div>

现在考虑以下场景(目的是决定是否展示)

场景 1:(跨度未显示)

this.state.addedMovieTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 0 
this.state.addedPersonTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 0

场景 2:(跨度显示 - 预期行为)

this.state.addedMovieTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 1 
this.state.addedPersonTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 0

场景 3:(跨度显示 - 预期行为)

this.state.addedMovieTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 2
this.state.addedPersonTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 0

场景 4:(跨度未显示 - 意外行为)

this.state.addedMovieTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 2
this.state.addedPersonTag.filter(function( obj ) {
    return obj.trivia_id === item.id;
}).length === 1

最佳答案

由于逻辑表达式是从左到右求值的,因此使用以下规则测试它们是否存在可能的“短路”求值:

false && (anything) 短路评估为 false。

真 || (anything) 短路评估为真。

所以你应该把所有的条件都放在括号里并使用||

<div className="item-actions">
    { (this.state.addedMovieTag.filter(function( obj ) {
        return obj.trivia_id === item.id;
    }).length > 0 || this.state.addedPersonTag.filter(function( obj ) {
        return obj.trivia_id === item.id;
    }).length > 0 ) &&  <span className="fa fa-edit" onClick={this.saveChanges.bind(this, item)}></span>}
    <span className="fa fa-trash"></span>
</div>

关于javascript - "or"运算符在 react 的渲染方法中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49918544/

相关文章:

javascript - 为什么 ng-view 中没有显示任何内容?

javascript - 如何在 0(零)处启动 javascript 'for of' 循环?

javascript - ajax 调用替换页面内容后,单击功能不起作用

javascript - 调整图像大小以适合其容器

javascript - express res.download()

javascript - ES6中使用Gulp编译React时出现语法错误

javascript - 我怎样才能共享范围并在 Angular Directive(指令)中传递数据

javascript - 对象作为来自 MongoDB 的 React 子数据无效

javascript - 检查数组中是否存在某个项目并从该数组中删除该特定项目

javascript - 无法过滤数组以在 react 应用程序上获取电影