ReactJS 中条件判断相关怎么处理

2018-04-29 20:50:54 +08:00
 wangxiaoaer

根据不同的条件渲染不同内容,vue 和 ng 中一般通过 if 指令进行:

.....

Reactjs 中好像需要把当前条件需要渲染的内容提取成变量,这就导致在正常从上往下写的时候需要判断了,马上再回到上面新建一个变量,再回来使用这个变量. 当某个组件里面判断较多的时候感觉很烦人.

有没有好办法

1612 次点击
所在节点    问与答
12 条回复
hlwjia
2018-04-29 20:55:06 +08:00
多数时间写 react, 刚接触 vue 的时候也是各种不习惯。他俩不是一个思维模式

可以去 github 上搜一圈 react 的组件,看看是怎么写的。不要用 vue 的思维去写
15757175166
2018-04-29 21:27:54 +08:00
{ flag&&< Component/>} or { flag?Component/>:null }
wangxiaoaer
2018-04-29 21:33:30 +08:00
@15757175166 #2 条件渲染的未必正好是一个 component,可能是这样:

```
if(xx){
<div ...
<h1>ssfdsa</h1>
<p>sss</p>
</div>
}else{
<div ...
<h1>ssfdsa</h1>
<p>sss</p>
</div>
}
```
asvencoop
2018-04-29 21:58:37 +08:00
个人感觉复杂的条件判断应该拆分组件了, 避免在组件内写多条件判断,后面的维护是个大坑
YYYeung
2018-04-29 22:02:50 +08:00
可以需要根据条件渲染的部分,抽象成一个方法,在这个方法中进行判断,为 true 就返回渲染的部分,为 false 就直接返回 null

然后在 render 中调用上面定义的方法,感觉这样还可以提高代码的可读性,起码一眼就可以通过方法名来知道这部分渲染的是什么了
ChefIsAwesome
2018-04-29 22:15:06 +08:00
某些写模板写习惯的朋友在写 react 的时候,思维换不过来,render 函数里头一写就是一大堆,恨不得把整个页面的 html 都给写里头。这一大堆 html 里碰上有条件判断的时候就手足无措。接下来放弃,开骂的人非常多。

在这里提醒下,react 的核心思想就是组件化。把大组件拆成小组件,不仅能提高可读性,提高复用性,性能上还能有非常大的提升。你把组件拆分了,条件判断这种事情根本不会对你造成影响了。
duzhihao
2018-04-29 23:36:23 +08:00
```js
<div className="c000 flex jc-center ai-center">
{query && query.type && !selectVal
? query.type
: search_category &&
search_category.length > 0 &&
search_category[
search_category.findIndex(
item => item.id === parseInt(selectVal, 0)
) > -1
? search_category.findIndex(
item => item.id === parseInt(selectVal, 0)
)
: 0
].name}
<i className="i-down font20 ml10" />
</div>
```
昨天写的判断
IceBay
2018-04-30 05:34:27 +08:00
@duzhihao #7 看着好难受
wangxiaoaer
2018-04-30 08:54:12 +08:00
@ChefIsAwesome 我是觉得组件拆分的粒度应该有个度,拆分过多一是影响可读性,二是造成组件爆炸,文件爆炸。
15757175166
2018-04-30 11:34:44 +08:00
@wangxiaoaer 符合 jsx 语法的代码块处理方式都是一样的
duzhihao
2018-05-11 15:06:32 +08:00
@IceBay 没优化,我们技术总监有代码洁癖要是让他看见少不了一顿臭骂。。。
IceBay
2018-05-11 15:11:05 +08:00
@duzhihao #11 我在 10 分钟前还是决定从 React 转 Vue,React 写的好难受。不知道有没有关于 React 的建议?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450945

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX