所以按照我的逻辑:
如果我碰到Email的不透明性,那么globlas.Email应该从false更改为true,但实际上它什么都不做
因为我认为'this.getMedia(item.MediaNow)'= true 然后至少是:'!(!this.getMedia(item.MediaNow))'=假
有人可以解释一下为什么吗? 或告诉我如何使我的代码按预期工作。
getMedia = Media => {
switch (Media) {
case "Call":
return global.Call;
case "Email":
return global.Email;
setMedia = (Media, value) => {
switch (Media) {
case "Call":
global.Call = value;
this.setState({});
case "Email":
global.Email= value;
this.setState({});
{...}
<TouchableOpacity
onPress={() => {
this.setMedia(!this.getMedia(item.MediaNow));
// MediaNow is either "Call" or "Email". so my expectet result of
// (!this.getMedia(item.MediaNow)) would be: true/false
}}
>
export default {
Call: false,
Email: false,
};
答案 0 :(得分:2)
查看您的方法:
setMedia = (Media, value) => {
现在看看你怎么称呼它
this.setMedia(!this.getMedia(item.MediaNow));
方法需要两个参数,而您要传递一个。
this.setMedia(item.MediaNow, !this.getMedia(item.MediaNow));
答案 1 :(得分:1)
据我所见,您将返回在全局对象内部定义的值。
使用!运算符,JavaScript会尝试将该值转换为布尔值,然后将其取反。
在您的情况下
(format t "~A~%" (read-line stream))
将被解析为...给我!this.getMedia(item.MediaNow)
的值并将其转换为bool。
JS将检查该值是否为falsy(未定义,零,false等)或true(对象,非空字符串等)。
就您而言...
!this.getMedia(item.MediaNow)