提问人:Luke 提问时间:3/17/2020 最后编辑:falinskyLuke 更新时间:9/27/2020 访问量:3267
在 React useState 中使用 (Or ||) 语法进行赋值
Using (Or ||) syntax inside of React useState for assignment
问:
我正在观察一种我以前在 react useState 钩子中从未见过的新语法。它
const [thing, setThing] = useState(thing || otherThing);
我以前从未见过在useState中使用过这种结构。我知道它是一个 javascript 原生逻辑运算符,但我很好奇如何在 useState 的上下文中解释它。
它本质上是否意味着,“如果这些事情中的任何一个是真的,就把它设置为事情?是假设它们两个永远不可能同时是真的吗?
答:
-2赞
goodvibration
3/17/2020
#1
const [thing, setThing] = useState(thing || otherThing);
如果 or 中的任何一个计算结果为真实表达式,则调用 then 并返回 2 个项目的元组。thing
otherThing
useState(true)
如果两者的计算结果都不为真实表达式,则调用并返回 2 个项目的元组。thing
otherThing
useState(false)
一些不真实的表达式示例:
false
null
undefined
""
[]
{}
1+1==3
3赞
Brian Thompson
3/17/2020
#2
它只是用作声明回退的简洁语法。如果第一个变量是假的,它将回退到第二个变量。
第一个值的示例:null
const {useState} = React;
const test = null;
const fallback = 'fallback';
const Example = () => {
const [state, setState] = useState(test || fallback);
console.log("state: ", state); // Logs the value of fallback
return <span />
}
ReactDOM.render(<Example />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>
但是,如果第一个变量是真实的,则使用:
const {useState} = React;
const test = 'first priority';
const fallback = true;
const Example = () => {
const [state, setState] = useState(test || fallback);
console.log("state: ", state); // Logs the value of test
return <span />
}
ReactDOM.render(<Example />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>
2赞
Miroslav Glamuzina
3/17/2020
#3
Javascript 中的双管运算符(逻辑 OR)将返回第一个可以转换为 的值。true
这并不是 React 独有的,它是一个烘焙的 vanilla-JS 运算符,你可以在任何地方使用。
以下是一些示例(取自 MDN):
o1 = true || true // t || t returns true
o2 = false || true // f || t returns true
o3 = true || false // t || f returns true
o4 = false || (3 == 4) // f || f returns false
o5 = 'Cat' || 'Dog' // t || t returns "Cat"
o6 = false || 'Cat' // f || t returns "Cat"
o7 = 'Cat' || false // t || f returns "Cat"
o8 = '' || false // f || f returns false
o9 = false || '' // f || f returns ""
o10 = false || varObject // f || object returns varObject
注意:如果使用此运算符为某些变量提供默认值,请注意不会使用任何虚假值。如果只需要过滤掉 null 或 undefined,请考虑使用 nullish 合并运算符
评论
thing
useState
otherThing