Javascript 反应JS";onChange";功能在iPad上不起作用

Javascript 反应JS";onChange";功能在iPad上不起作用,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我在输入上有一个onChange-事件,用于侦听目标的时间。值大于0时,使类能够显示一个按钮 不过,这在台式机上有效,在iPad Safari上不起作用——我不确定为什么 注意:我使用的是样式化组件,PDInput被声明为输入 const PDInput = styled.input` background: #fff; border: none; border-bottom: 1px solid #f2f2f5; padding: 8px 0; padd

我在输入上有一个
onChange
-事件,用于侦听
目标的时间。值
大于0时,使类能够显示一个按钮

不过,这在台式机上有效,在iPad Safari上不起作用——我不确定为什么

注意:我使用的是样式化组件,
PDInput
被声明为输入

const PDInput = styled.input`
    background: #fff;
    border: none;
    border-bottom: 1px solid #f2f2f5;
    padding: 8px 0;
    padding-left: ${props => props.amount ? "15px" : "0"};
    font-size: 16px;
    color: #0c2074;
    width: 100%;
    margin-bottom: 24px;

    &::placeholder {
        color: #0c2074;
        opacity: 0.5;
    }
`

const updateRef = e => {
    if(e.target.value > 0) {
        setRef(true);
    } else {
        setRef(false);
    }
}


<PDInput type="text" placeholder="E.G Rent" onChange={(e) => updateRef(e)} />
constpdinput=styled.input`
背景:#fff;
边界:无;
边框底部:1px实心#f2f5;
填充:8px0;
左侧填充:${props=>props.amount?“15px”:“0”};
字体大小:16px;
颜色:#0c2074;
宽度:100%;
边缘底部:24px;
&::占位符{
颜色:#0c2074;
不透明度:0.5;
}
`
const updateRef=e=>{
如果(例如,目标值>0){
setRef(真);
}否则{
setRef(假);
}
}
updateRef(e)}/>

这是一个解决方案-问题是e.target.value在技术上不是>0。它返回false。您想检查e.target.value!=''

代码:

const updateRef = e => {
        if(e.target.value > 0 || e.target.value !== '') {
            setRef(true);
        } else {
            setRef(false);
        }
    }

你能解释一下“非功能性”的具体含义吗?您是否能够从
updateRef
函数中登录?还是连电话都没有?在没有状态更新的情况下,您的条件是否按预期通过/失败?在我侦听e.target.value时,状态得到正确更新。当setRef设置为真时,屏幕上会显示一个按钮。这在桌面上可以正常工作,但在iPad safari上不能。在桌面上一切正常。你应该用safari日志调试iPad。日志可能更有用。按照此链接进行调试。是否可以显示PDInput的源代码?使用普通输入进行尝试,看看是否有效。也许这与样式化的组件有关。不像可能的那样干燥。尝试
setRef(e.target.value>0 | | e.target.value!='')
。但是
0
'
都是假值,因此可以使用布尔强制进一步简化为
setRef(!!e.target.value)
。@DrewReese-DRY?我会选择上面的解决方案,因为它比你建议的更容易阅读。@goto1我不得不同意Drew的观点,当我阅读
if(booleanStatement){set(true)}else{set(false)}
时,我在想为什么会有这些额外的错误?只需执行
设置(布尔语句)
。不确定我们是否应该从自称goto的人那里得到编码可读性的建议(只是开玩笑的Tom)。@HRM然后我会创建一个额外的变量,即
const isValidRef=(…);setRef(isValidRef)
而不是使用
setRef(!!e.target.value)
-不是每个人都会立即知道
的内容在这里运行。那么为什么它在桌面上运行呢?台式机和ipad在行为上有什么不同?