在移动端用H5做实时搜索功能时,发现在安卓上没问题,但iphone机型上有如下问题:
- 当输入中文时,待选拼音的变动会不断触发onchange事件,导致请求太多
- 当input绑定的value值是父组件传过来时, input输入不了了
【背景说明】原构想是,父组件传值valueFromFather给子组件input的value, 子组件input检测到变化后抛出去valueNew给父组件,父组件依此valueNew发出请求并修改绑定给子组件的valueFromFather = valueNew, 这样相当于子组件不处理任何业务逻辑,是个实时搜索纯组件,方便以后复用。但发现在iphone上,这个思路传递value时,input输入不了任何东西了
最后解决办法如下:
- 问题1频繁触发onchange的问题,用onCompositionStart,onCompositionUpdate,onCompositionEnd处理,这样的好处是拼音待选的变动不会触发onchange
- 问题2不能输入的问题,只要input不要添加value属性即可。(这样虽然可以解决问题,但我还是很疑惑)
【代码如下】
// html
<input
type="text"
placeholder="请输入"
onCompositionStart={handleCompositionStart}
onCompositionUpdate={handleCompositionStart}
onCompositionEnd={handleCompositionEnd}
onChange={handleChange}
/>
//js
let inputFlag = true;
const handleChange = e => {
e.persist();
setTimeout(function() {
if (inputFlag) {
const targetValue = e.target.value;
props.OnSearchValueChanged(targetValue);
}
}, 0);
};
const handleCompositionStart = () => {
inputFlag = false;
};
const handleCompositionEnd = () => {
inputFlag = true;
};