@tarojs/components-react 4.1.10-beta.0 → 4.1.10-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,6 +19,12 @@ function getTrueType(type, confirmType, password) {
19
19
  function fixControlledValue(value) {
20
20
  return value !== null && value !== void 0 ? value : '';
21
21
  }
22
+ /**
23
+ * 谷歌浏览器: compositionstart -> onChange -> compositionend
24
+ * 其他浏览器: compositionstart -> compositionend -> onChange
25
+ * 普通按键 (A-Z): handleInput -> setState(compositionValue) -> UI 更新。
26
+ * 空格选词 (中文输入法): compositionend -> triggerValueChange(外部回调) -> onInputExecuted = true -> 紧随其后的 handleInput 被拦截退出。
27
+ */
22
28
  class Input extends React__default.Component {
23
29
  constructor(props) {
24
30
  super(props);
@@ -34,6 +40,9 @@ class Input extends React__default.Component {
34
40
  }
35
41
  }
36
42
  };
43
+ this.state = {
44
+ compositionValue: undefined
45
+ };
37
46
  this.handleInput = this.handleInput.bind(this);
38
47
  this.handlePaste = this.handlePaste.bind(this);
39
48
  this.handleFocus = this.handleFocus.bind(this);
@@ -42,7 +51,8 @@ class Input extends React__default.Component {
42
51
  this.handleComposition = this.handleComposition.bind(this);
43
52
  this.handleBeforeInput = this.handleBeforeInput.bind(this);
44
53
  this.isOnComposition = false;
45
- this.onInputExcuted = false;
54
+ // onInputExecuted 标记用于防止某些浏览器的事件重复触发
55
+ this.onInputExecuted = false;
46
56
  }
47
57
  componentDidMount() {
48
58
  var _a, _b;
@@ -67,8 +77,10 @@ class Input extends React__default.Component {
67
77
  UNSAFE_componentWillReceiveProps(nextProps) {
68
78
  if (!this.props.focus && nextProps.focus && this.inputRef) this.inputRef.focus();
69
79
  }
70
- handleInput(e) {
71
- e.stopPropagation();
80
+ /**
81
+ * 处理 maxLength 逻辑并调用 props.onInput
82
+ */
83
+ triggerValueChange(value, e) {
72
84
  const {
73
85
  type,
74
86
  maxlength = 140,
@@ -76,22 +88,24 @@ class Input extends React__default.Component {
76
88
  password = false,
77
89
  onInput
78
90
  } = this.props;
79
- if (!this.isOnComposition && !this.onInputExcuted) {
80
- let {
81
- value
82
- } = e.target;
83
- const inputType = getTrueType(type, confirmType, password);
84
- this.onInputExcuted = true;
85
- /* 修复 number 类型 maxLength 无效 */
86
- if (inputType === 'number' && value && maxlength <= value.length) {
87
- value = value.substring(0, maxlength);
88
- e.target.value = value;
91
+ let finalValue = value;
92
+ const inputType = getTrueType(type, confirmType, password);
93
+ /* 修复 number 类型 maxLength 无效 */
94
+ if (inputType === 'number' && finalValue && maxlength <= finalValue.length) {
95
+ finalValue = finalValue.substring(0, maxlength);
96
+ // 如果被截断了,需要同步回 DOM
97
+ if (e.target && e.target.value !== finalValue) {
98
+ e.target.value = finalValue;
89
99
  }
100
+ }
101
+ // 只有当值确实改变,或者需要强制触发时才调用
102
+ if (typeof onInput === 'function') {
90
103
  Object.defineProperty(e, 'detail', {
91
104
  value: {
92
- value,
93
- cursor: value.length
94
- }
105
+ value: finalValue,
106
+ cursor: finalValue.length
107
+ },
108
+ configurable: true
95
109
  });
96
110
  // // 修复 IOS 光标跳转问题
97
111
  // if (!(['number', 'file'].indexOf(inputType) >= 0)) {
@@ -103,8 +117,37 @@ class Input extends React__default.Component {
103
117
  // }
104
118
  // )
105
119
  // }
106
- typeof onInput === 'function' && onInput(e);
107
- this.onInputExcuted = false;
120
+ onInput(e);
121
+ }
122
+ }
123
+ handleInput(e) {
124
+ e.stopPropagation();
125
+ // 如果是 compositionend 刚刚触发过的,这里消费掉标记并退出,防止双重触发
126
+ // 适配其他浏览器的 compositionend -> onChange 顺序
127
+ if (this.onInputExecuted) {
128
+ this.onInputExecuted = false;
129
+ return;
130
+ }
131
+ const newValue = e.target.value;
132
+ if (this.isOnComposition) {
133
+ // Case 1: 正在拼写中文(compositionstart 已触发但 compositionend 未触发)
134
+ // 只更新组件内部 State,让 Input 显示拼音,不触发外部 onChange
135
+ // 适配谷歌浏览器的 compositionstart -> onChange -> compositionend 顺序
136
+ this.setState({
137
+ compositionValue: newValue
138
+ });
139
+ } else {
140
+ // Case 2: 普通输入 (英文、数字、或中文选词后)
141
+ // 标记执行,防止重复
142
+ this.onInputExecuted = true;
143
+ // 清理中间状态
144
+ if (this.state.compositionValue !== undefined) {
145
+ this.setState({
146
+ compositionValue: undefined
147
+ });
148
+ }
149
+ this.triggerValueChange(newValue, e);
150
+ this.onInputExecuted = false;
108
151
  }
109
152
  }
110
153
  handlePaste(e) {
@@ -112,7 +155,7 @@ class Input extends React__default.Component {
112
155
  const {
113
156
  onPaste
114
157
  } = this.props;
115
- this.onInputExcuted = false;
158
+ this.onInputExecuted = false;
116
159
  Object.defineProperty(e, 'detail', {
117
160
  value: {
118
161
  value: e.target.value
@@ -125,7 +168,7 @@ class Input extends React__default.Component {
125
168
  const {
126
169
  onFocus
127
170
  } = this.props;
128
- this.onInputExcuted = false;
171
+ this.onInputExecuted = false;
129
172
  Object.defineProperty(e, 'detail', {
130
173
  value: {
131
174
  value: e.target.value
@@ -155,7 +198,7 @@ class Input extends React__default.Component {
155
198
  value
156
199
  } = e.target;
157
200
  const keyCode = e.keyCode || e.code;
158
- this.onInputExcuted = false;
201
+ this.onInputExecuted = false;
159
202
  if (typeof onKeyDown === 'function') {
160
203
  Object.defineProperty(e, 'detail', {
161
204
  value: {
@@ -178,11 +221,27 @@ class Input extends React__default.Component {
178
221
  handleComposition(e) {
179
222
  e.stopPropagation();
180
223
  if (!(e.target instanceof HTMLInputElement)) return;
181
- if (e.type === 'compositionend') {
182
- this.isOnComposition = false;
183
- this.handleInput(e);
184
- } else {
224
+ if (e.type === 'compositionstart') {
225
+ // 开始输入中文,标记进入拼音输入状态
226
+ this.isOnComposition = true;
227
+ } else if (e.type === 'compositionupdate') {
228
+ // 拼音输入过程中,保持标记并更新显示
185
229
  this.isOnComposition = true;
230
+ // 必须在这里触发 setState 才能让输入框里的拼音实时更新
231
+ this.handleInput(e);
232
+ } else if (e.type === 'compositionend') {
233
+ // 中文选词结束,退出拼音输入状态
234
+ this.isOnComposition = false;
235
+ // 立即获取最终值
236
+ const newValue = e.target.value;
237
+ // 清空中间状态
238
+ this.setState({
239
+ compositionValue: undefined
240
+ });
241
+ // 设置标记,防止后续的 handleInput 重复触发(适配其他浏览器)
242
+ this.onInputExecuted = true;
243
+ // 强制触发一次 value change,确保父组件收到最终汉字
244
+ this.triggerValueChange(newValue, e);
186
245
  }
187
246
  }
188
247
  render() {
@@ -197,11 +256,14 @@ class Input extends React__default.Component {
197
256
  name,
198
257
  value
199
258
  } = this.props;
259
+ const {
260
+ compositionValue
261
+ } = this.state;
200
262
  const cls = classNames('taro-input-core', 'weui-input', className);
201
- const otherProps = omit(this.props, ['forwardedRef', 'className', 'placeholder', 'disabled', 'password', 'type', 'maxlength', 'confirmType', 'focus', 'name']);
202
- if ('value' in this.props) {
203
- otherProps.value = fixControlledValue(value);
204
- }
263
+ const otherProps = omit(this.props, ['forwardedRef', 'className', 'placeholder', 'disabled', 'password', 'type', 'maxlength', 'confirmType', 'focus', 'name', 'onInput']);
264
+ // 如果有 compositionValue (正在输入拼音),则显示 compositionValue
265
+ // 否则显示 props 传进来的受控 value
266
+ const displayValue = compositionValue !== undefined ? compositionValue : fixControlledValue(value);
205
267
  return /*#__PURE__*/jsx("input", {
206
268
  ref: input => {
207
269
  if (this.props.forwardedRef) {
@@ -216,12 +278,14 @@ class Input extends React__default.Component {
216
278
  disabled: disabled,
217
279
  maxLength: maxlength,
218
280
  name: name,
281
+ value: displayValue,
219
282
  onInput: this.handleInput,
220
283
  onPaste: this.handlePaste,
221
284
  onFocus: this.handleFocus,
222
285
  onBlur: this.handleBlur,
223
286
  onKeyDown: this.handleKeyDown,
224
287
  onCompositionStart: this.handleComposition,
288
+ onCompositionUpdate: this.handleComposition,
225
289
  onCompositionEnd: this.handleComposition,
226
290
  onBeforeInput: this.handleBeforeInput
227
291
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/input/index.tsx"],"sourcesContent":["import './style/index.scss'\n\nimport classNames from 'classnames'\nimport React from 'react'\n\nimport { createForwardRefComponent, omit } from '../../utils'\n\nfunction getTrueType (type: string | undefined, confirmType: string, password: boolean) {\n if (confirmType === 'search') type = 'search'\n if (password) type = 'password'\n if (typeof type === 'undefined') {\n return 'text'\n }\n if (!type) {\n throw new Error('unexpected type')\n }\n if (type === 'digit') type = 'number'\n\n return type\n}\n\nfunction fixControlledValue (value) {\n return value ?? ''\n}\n\ninterface IProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n password?: boolean\n disabled?: boolean\n maxlength?: number\n placeholder?: string\n value?: string\n focus?: boolean\n confirmType?: string\n name?: string\n type?: string\n onConfirm?: (e) => void\n forwardedRef?: React.MutableRefObject<HTMLInputElement>\n}\n\nclass Input extends React.Component<IProps, null> {\n constructor (props) {\n super(props)\n this.handleInput = this.handleInput.bind(this)\n this.handlePaste = this.handlePaste.bind(this)\n this.handleFocus = this.handleFocus.bind(this)\n this.handleBlur = this.handleBlur.bind(this)\n this.handleKeyDown = this.handleKeyDown.bind(this)\n this.handleComposition = this.handleComposition.bind(this)\n this.handleBeforeInput = this.handleBeforeInput.bind(this)\n this.isOnComposition = false\n this.onInputExcuted = false\n }\n\n inputRef: HTMLInputElement\n isOnComposition: boolean\n onInputExcuted: boolean\n\n componentDidMount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef?.addEventListener('change', this.handleInput)\n } else {\n this.inputRef?.addEventListener('textInput', this.handleBeforeInput)\n }\n\n // 处理初始化是否 focus\n if (this.props.focus && this.inputRef) this.inputRef.focus()\n }\n\n componentWillUnmount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef.removeEventListener('change', this.handleInput)\n } else {\n this.inputRef?.removeEventListener('textInput', this.handleBeforeInput)\n }\n }\n\n UNSAFE_componentWillReceiveProps (nextProps: Readonly<IProps>) {\n if (!this.props.focus && nextProps.focus && this.inputRef) this.inputRef.focus()\n }\n\n handleInput (e) {\n e.stopPropagation()\n const {\n type,\n maxlength = 140,\n confirmType = 'done',\n password = false,\n onInput\n } = this.props\n\n if (!this.isOnComposition && !this.onInputExcuted) {\n let { value } = e.target\n const inputType = getTrueType(type, confirmType, password)\n this.onInputExcuted = true\n /* 修复 number 类型 maxLength 无效 */\n if (inputType === 'number' && value && maxlength <= value.length) {\n value = value.substring(0, maxlength)\n e.target.value = value\n }\n\n Object.defineProperty(e, 'detail', {\n value: { value, cursor: value.length }\n })\n // // 修复 IOS 光标跳转问题\n // if (!(['number', 'file'].indexOf(inputType) >= 0)) {\n // const pos = e.target.selectionEnd\n // setTimeout(\n // () => {\n // e.target.selectionStart = pos\n // e.target.selectionEnd = pos\n // }\n // )\n // }\n\n typeof onInput === 'function' && onInput(e)\n this.onInputExcuted = false\n }\n }\n\n handlePaste (e) {\n e.stopPropagation()\n const { onPaste } = this.props\n this.onInputExcuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n typeof onPaste === 'function' && onPaste(e)\n }\n\n handleFocus (e) {\n e.stopPropagation()\n const { onFocus } = this.props\n this.onInputExcuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onFocus && onFocus(e)\n }\n\n handleBlur (e) {\n e.stopPropagation()\n const { onBlur } = this.props\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onBlur && onBlur(e)\n }\n\n handleKeyDown (e) {\n e.stopPropagation()\n const { onConfirm, onKeyDown } = this.props\n const { value } = e.target\n const keyCode = e.keyCode || e.code\n this.onInputExcuted = false\n\n if (typeof onKeyDown === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value,\n cursor: value.length,\n keyCode\n }\n })\n onKeyDown(e)\n }\n\n if (e.keyCode === 13 && typeof onConfirm === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value\n }\n })\n onConfirm(e)\n }\n }\n\n handleComposition (e) {\n e.stopPropagation()\n if (!(e.target instanceof HTMLInputElement)) return\n\n if (e.type === 'compositionend') {\n this.isOnComposition = false\n this.handleInput(e)\n } else {\n this.isOnComposition = true\n }\n }\n\n handleBeforeInput = (e) => {\n if (!e.data) return\n const isNumber = e.data && /[0-9]/.test(e.data)\n if (this.props.type === 'number' && !isNumber) {\n e.preventDefault()\n }\n if (this.props.type === 'digit' && !isNumber) {\n if (e.data !== '.' || (e.data === '.' && e.target.value.indexOf('.') > -1)) {\n e.preventDefault()\n }\n }\n }\n\n render () {\n const {\n className = '',\n placeholder,\n type,\n password = false,\n disabled = false,\n maxlength = 140,\n confirmType = 'done',\n name,\n value\n } = this.props\n const cls = classNames('taro-input-core', 'weui-input', className)\n\n const otherProps = omit(this.props, [\n 'forwardedRef',\n 'className',\n 'placeholder',\n 'disabled',\n 'password',\n 'type',\n 'maxlength',\n 'confirmType',\n 'focus',\n 'name'\n ])\n\n if ('value' in this.props) {\n otherProps.value = fixControlledValue(value)\n }\n\n return (\n <input\n ref={(input: HTMLInputElement) => {\n if (this.props.forwardedRef) {\n this.props.forwardedRef.current = input\n }\n this.inputRef = input\n }}\n {...otherProps}\n className={cls}\n type={getTrueType(type, confirmType, password)}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxlength}\n name={name}\n onInput={this.handleInput}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onKeyDown={this.handleKeyDown}\n onCompositionStart={this.handleComposition}\n onCompositionEnd={this.handleComposition}\n onBeforeInput={this.handleBeforeInput}\n />\n )\n }\n}\n\nexport default createForwardRefComponent(Input)\n"],"names":["getTrueType","type","confirmType","password","Error","fixControlledValue","value","Input","React","Component","constructor","props","handleBeforeInput","e","data","isNumber","test","preventDefault","target","indexOf","handleInput","bind","handlePaste","handleFocus","handleBlur","handleKeyDown","handleComposition","isOnComposition","onInputExcuted","componentDidMount","_a","inputRef","addEventListener","_b","focus","componentWillUnmount","removeEventListener","UNSAFE_componentWillReceiveProps","nextProps","stopPropagation","maxlength","onInput","inputType","length","substring","Object","defineProperty","cursor","onPaste","onFocus","onBlur","onConfirm","onKeyDown","keyCode","code","HTMLInputElement","render","className","placeholder","disabled","name","cls","classNames","otherProps","omit","_jsx","ref","input","forwardedRef","current","maxLength","onCompositionStart","onCompositionEnd","onBeforeInput","createForwardRefComponent"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/input/index.tsx"],"sourcesContent":["import './style/index.scss'\n\nimport classNames from 'classnames'\nimport React from 'react'\n\nimport { createForwardRefComponent, omit } from '../../utils'\n\nfunction getTrueType (type: string | undefined, confirmType: string, password: boolean) {\n if (confirmType === 'search') type = 'search'\n if (password) type = 'password'\n if (typeof type === 'undefined') {\n return 'text'\n }\n if (!type) {\n throw new Error('unexpected type')\n }\n if (type === 'digit') type = 'number'\n\n return type\n}\n\nfunction fixControlledValue (value) {\n return value ?? ''\n}\n\ninterface IProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n password?: boolean\n disabled?: boolean\n maxlength?: number\n placeholder?: string\n value?: string\n focus?: boolean\n confirmType?: string\n name?: string\n type?: string\n onConfirm?: (e) => void\n forwardedRef?: React.MutableRefObject<HTMLInputElement>\n}\n\ninterface IState {\n compositionValue?: string\n}\n\n\n/**\n * 谷歌浏览器: compositionstart -> onChange -> compositionend\n * 其他浏览器: compositionstart -> compositionend -> onChange\n * 普通按键 (A-Z): handleInput -> setState(compositionValue) -> UI 更新。\n * 空格选词 (中文输入法): compositionend -> triggerValueChange(外部回调) -> onInputExecuted = true -> 紧随其后的 handleInput 被拦截退出。\n */\n\nclass Input extends React.Component<IProps, IState> {\n constructor (props) {\n super(props)\n this.state = {\n compositionValue: undefined\n }\n\n this.handleInput = this.handleInput.bind(this)\n this.handlePaste = this.handlePaste.bind(this)\n this.handleFocus = this.handleFocus.bind(this)\n this.handleBlur = this.handleBlur.bind(this)\n this.handleKeyDown = this.handleKeyDown.bind(this)\n this.handleComposition = this.handleComposition.bind(this)\n this.handleBeforeInput = this.handleBeforeInput.bind(this)\n this.isOnComposition = false\n // onInputExecuted 标记用于防止某些浏览器的事件重复触发\n this.onInputExecuted = false\n }\n\n inputRef: HTMLInputElement\n isOnComposition: boolean\n onInputExecuted: boolean\n\n componentDidMount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef?.addEventListener('change', this.handleInput)\n } else {\n this.inputRef?.addEventListener('textInput', this.handleBeforeInput)\n }\n\n // 处理初始化是否 focus\n if (this.props.focus && this.inputRef) this.inputRef.focus()\n }\n\n componentWillUnmount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef.removeEventListener('change', this.handleInput)\n } else {\n this.inputRef?.removeEventListener('textInput', this.handleBeforeInput)\n }\n }\n\n UNSAFE_componentWillReceiveProps (nextProps: Readonly<IProps>) {\n if (!this.props.focus && nextProps.focus && this.inputRef) this.inputRef.focus()\n }\n\n /**\n * 处理 maxLength 逻辑并调用 props.onInput\n */\n triggerValueChange (value: string, e: any) {\n const {\n type,\n maxlength = 140,\n confirmType = 'done',\n password = false,\n onInput\n } = this.props\n\n let finalValue = value\n const inputType = getTrueType(type, confirmType, password)\n\n /* 修复 number 类型 maxLength 无效 */\n if (inputType === 'number' && finalValue && maxlength <= finalValue.length) {\n finalValue = finalValue.substring(0, maxlength)\n // 如果被截断了,需要同步回 DOM\n if (e.target && e.target.value !== finalValue) {\n e.target.value = finalValue\n }\n }\n\n // 只有当值确实改变,或者需要强制触发时才调用\n if (typeof onInput === 'function') {\n Object.defineProperty(e, 'detail', {\n value: { value: finalValue, cursor: finalValue.length },\n configurable: true\n })\n // // 修复 IOS 光标跳转问题\n // if (!(['number', 'file'].indexOf(inputType) >= 0)) {\n // const pos = e.target.selectionEnd\n // setTimeout(\n // () => {\n // e.target.selectionStart = pos\n // e.target.selectionEnd = pos\n // }\n // )\n // }\n onInput(e)\n }\n }\n\n handleInput (e) {\n e.stopPropagation()\n // 如果是 compositionend 刚刚触发过的,这里消费掉标记并退出,防止双重触发\n // 适配其他浏览器的 compositionend -> onChange 顺序\n if (this.onInputExecuted) {\n this.onInputExecuted = false\n return\n }\n\n const newValue = e.target.value\n\n if (this.isOnComposition) {\n // Case 1: 正在拼写中文(compositionstart 已触发但 compositionend 未触发)\n // 只更新组件内部 State,让 Input 显示拼音,不触发外部 onChange\n // 适配谷歌浏览器的 compositionstart -> onChange -> compositionend 顺序\n this.setState({ compositionValue: newValue })\n } else {\n // Case 2: 普通输入 (英文、数字、或中文选词后)\n // 标记执行,防止重复\n this.onInputExecuted = true\n\n // 清理中间状态\n if (this.state.compositionValue !== undefined) {\n this.setState({ compositionValue: undefined })\n }\n\n this.triggerValueChange(newValue, e)\n this.onInputExecuted = false\n }\n }\n\n handlePaste (e) {\n e.stopPropagation()\n const { onPaste } = this.props\n this.onInputExecuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n typeof onPaste === 'function' && onPaste(e)\n }\n\n handleFocus (e) {\n e.stopPropagation()\n const { onFocus } = this.props\n this.onInputExecuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onFocus && onFocus(e)\n }\n\n handleBlur (e) {\n e.stopPropagation()\n const { onBlur } = this.props\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onBlur && onBlur(e)\n }\n\n handleKeyDown (e) {\n e.stopPropagation()\n const { onConfirm, onKeyDown } = this.props\n const { value } = e.target\n const keyCode = e.keyCode || e.code\n this.onInputExecuted = false\n\n if (typeof onKeyDown === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value,\n cursor: value.length,\n keyCode\n }\n })\n onKeyDown(e)\n }\n\n if (e.keyCode === 13 && typeof onConfirm === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value\n }\n })\n onConfirm(e)\n }\n }\n\n handleComposition (e) {\n e.stopPropagation()\n if (!(e.target instanceof HTMLInputElement)) return\n\n if (e.type === 'compositionstart') {\n // 开始输入中文,标记进入拼音输入状态\n this.isOnComposition = true\n } else if (e.type === 'compositionupdate') {\n // 拼音输入过程中,保持标记并更新显示\n this.isOnComposition = true\n // 必须在这里触发 setState 才能让输入框里的拼音实时更新\n this.handleInput(e)\n } else if (e.type === 'compositionend') {\n // 中文选词结束,退出拼音输入状态\n this.isOnComposition = false\n // 立即获取最终值\n const newValue = e.target.value\n\n // 清空中间状态\n this.setState({ compositionValue: undefined })\n\n // 设置标记,防止后续的 handleInput 重复触发(适配其他浏览器)\n this.onInputExecuted = true\n\n // 强制触发一次 value change,确保父组件收到最终汉字\n this.triggerValueChange(newValue, e)\n }\n }\n\n handleBeforeInput = (e) => {\n if (!e.data) return\n const isNumber = e.data && /[0-9]/.test(e.data)\n if (this.props.type === 'number' && !isNumber) {\n e.preventDefault()\n }\n if (this.props.type === 'digit' && !isNumber) {\n if (e.data !== '.' || (e.data === '.' && e.target.value.indexOf('.') > -1)) {\n e.preventDefault()\n }\n }\n }\n\n render () {\n const {\n className = '',\n placeholder,\n type,\n password = false,\n disabled = false,\n maxlength = 140,\n confirmType = 'done',\n name,\n value\n } = this.props\n\n const { compositionValue } = this.state\n\n const cls = classNames('taro-input-core', 'weui-input', className)\n\n const otherProps = omit(this.props, [\n 'forwardedRef',\n 'className',\n 'placeholder',\n 'disabled',\n 'password',\n 'type',\n 'maxlength',\n 'confirmType',\n 'focus',\n 'name',\n 'onInput'\n ])\n\n // 如果有 compositionValue (正在输入拼音),则显示 compositionValue\n // 否则显示 props 传进来的受控 value\n const displayValue = compositionValue !== undefined\n ? compositionValue\n : fixControlledValue(value)\n\n return (\n <input\n ref={(input: HTMLInputElement) => {\n if (this.props.forwardedRef) {\n this.props.forwardedRef.current = input\n }\n this.inputRef = input\n }}\n {...otherProps}\n className={cls}\n type={getTrueType(type, confirmType, password)}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxlength}\n name={name}\n value={displayValue}\n onInput={this.handleInput}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onKeyDown={this.handleKeyDown}\n onCompositionStart={this.handleComposition}\n onCompositionUpdate={this.handleComposition}\n onCompositionEnd={this.handleComposition}\n onBeforeInput={this.handleBeforeInput}\n />\n )\n }\n}\n\nexport default createForwardRefComponent(Input)\n"],"names":["getTrueType","type","confirmType","password","Error","fixControlledValue","value","Input","React","Component","constructor","props","handleBeforeInput","e","data","isNumber","test","preventDefault","target","indexOf","state","compositionValue","undefined","handleInput","bind","handlePaste","handleFocus","handleBlur","handleKeyDown","handleComposition","isOnComposition","onInputExecuted","componentDidMount","_a","inputRef","addEventListener","_b","focus","componentWillUnmount","removeEventListener","UNSAFE_componentWillReceiveProps","nextProps","triggerValueChange","maxlength","onInput","finalValue","inputType","length","substring","Object","defineProperty","cursor","configurable","stopPropagation","newValue","setState","onPaste","onFocus","onBlur","onConfirm","onKeyDown","keyCode","code","HTMLInputElement","render","className","placeholder","disabled","name","cls","classNames","otherProps","omit","displayValue","_jsx","ref","input","forwardedRef","current","maxLength","onCompositionStart","onCompositionUpdate","onCompositionEnd","onBeforeInput","createForwardRefComponent"],"mappings":"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"}
@@ -19,6 +19,12 @@ function getTrueType(type, confirmType, password) {
19
19
  function fixControlledValue(value) {
20
20
  return value !== null && value !== void 0 ? value : '';
21
21
  }
22
+ /**
23
+ * 谷歌浏览器: compositionstart -> onChange -> compositionend
24
+ * 其他浏览器: compositionstart -> compositionend -> onChange
25
+ * 普通按键 (A-Z): handleInput -> setState(compositionValue) -> UI 更新。
26
+ * 空格选词 (中文输入法): compositionend -> triggerValueChange(外部回调) -> onInputExecuted = true -> 紧随其后的 handleInput 被拦截退出。
27
+ */
22
28
  class Input extends React__default.Component {
23
29
  constructor(props) {
24
30
  super(props);
@@ -34,6 +40,9 @@ class Input extends React__default.Component {
34
40
  }
35
41
  }
36
42
  };
43
+ this.state = {
44
+ compositionValue: undefined
45
+ };
37
46
  this.handleInput = this.handleInput.bind(this);
38
47
  this.handlePaste = this.handlePaste.bind(this);
39
48
  this.handleFocus = this.handleFocus.bind(this);
@@ -42,7 +51,8 @@ class Input extends React__default.Component {
42
51
  this.handleComposition = this.handleComposition.bind(this);
43
52
  this.handleBeforeInput = this.handleBeforeInput.bind(this);
44
53
  this.isOnComposition = false;
45
- this.onInputExcuted = false;
54
+ // onInputExecuted 标记用于防止某些浏览器的事件重复触发
55
+ this.onInputExecuted = false;
46
56
  }
47
57
  componentDidMount() {
48
58
  var _a, _b;
@@ -67,8 +77,10 @@ class Input extends React__default.Component {
67
77
  UNSAFE_componentWillReceiveProps(nextProps) {
68
78
  if (!this.props.focus && nextProps.focus && this.inputRef) this.inputRef.focus();
69
79
  }
70
- handleInput(e) {
71
- e.stopPropagation();
80
+ /**
81
+ * 处理 maxLength 逻辑并调用 props.onInput
82
+ */
83
+ triggerValueChange(value, e) {
72
84
  const {
73
85
  type,
74
86
  maxlength = 140,
@@ -76,22 +88,24 @@ class Input extends React__default.Component {
76
88
  password = false,
77
89
  onInput
78
90
  } = this.props;
79
- if (!this.isOnComposition && !this.onInputExcuted) {
80
- let {
81
- value
82
- } = e.target;
83
- const inputType = getTrueType(type, confirmType, password);
84
- this.onInputExcuted = true;
85
- /* 修复 number 类型 maxLength 无效 */
86
- if (inputType === 'number' && value && maxlength <= value.length) {
87
- value = value.substring(0, maxlength);
88
- e.target.value = value;
91
+ let finalValue = value;
92
+ const inputType = getTrueType(type, confirmType, password);
93
+ /* 修复 number 类型 maxLength 无效 */
94
+ if (inputType === 'number' && finalValue && maxlength <= finalValue.length) {
95
+ finalValue = finalValue.substring(0, maxlength);
96
+ // 如果被截断了,需要同步回 DOM
97
+ if (e.target && e.target.value !== finalValue) {
98
+ e.target.value = finalValue;
89
99
  }
100
+ }
101
+ // 只有当值确实改变,或者需要强制触发时才调用
102
+ if (typeof onInput === 'function') {
90
103
  Object.defineProperty(e, 'detail', {
91
104
  value: {
92
- value,
93
- cursor: value.length
94
- }
105
+ value: finalValue,
106
+ cursor: finalValue.length
107
+ },
108
+ configurable: true
95
109
  });
96
110
  // // 修复 IOS 光标跳转问题
97
111
  // if (!(['number', 'file'].indexOf(inputType) >= 0)) {
@@ -103,8 +117,37 @@ class Input extends React__default.Component {
103
117
  // }
104
118
  // )
105
119
  // }
106
- typeof onInput === 'function' && onInput(e);
107
- this.onInputExcuted = false;
120
+ onInput(e);
121
+ }
122
+ }
123
+ handleInput(e) {
124
+ e.stopPropagation();
125
+ // 如果是 compositionend 刚刚触发过的,这里消费掉标记并退出,防止双重触发
126
+ // 适配其他浏览器的 compositionend -> onChange 顺序
127
+ if (this.onInputExecuted) {
128
+ this.onInputExecuted = false;
129
+ return;
130
+ }
131
+ const newValue = e.target.value;
132
+ if (this.isOnComposition) {
133
+ // Case 1: 正在拼写中文(compositionstart 已触发但 compositionend 未触发)
134
+ // 只更新组件内部 State,让 Input 显示拼音,不触发外部 onChange
135
+ // 适配谷歌浏览器的 compositionstart -> onChange -> compositionend 顺序
136
+ this.setState({
137
+ compositionValue: newValue
138
+ });
139
+ } else {
140
+ // Case 2: 普通输入 (英文、数字、或中文选词后)
141
+ // 标记执行,防止重复
142
+ this.onInputExecuted = true;
143
+ // 清理中间状态
144
+ if (this.state.compositionValue !== undefined) {
145
+ this.setState({
146
+ compositionValue: undefined
147
+ });
148
+ }
149
+ this.triggerValueChange(newValue, e);
150
+ this.onInputExecuted = false;
108
151
  }
109
152
  }
110
153
  handlePaste(e) {
@@ -112,7 +155,7 @@ class Input extends React__default.Component {
112
155
  const {
113
156
  onPaste
114
157
  } = this.props;
115
- this.onInputExcuted = false;
158
+ this.onInputExecuted = false;
116
159
  Object.defineProperty(e, 'detail', {
117
160
  value: {
118
161
  value: e.target.value
@@ -125,7 +168,7 @@ class Input extends React__default.Component {
125
168
  const {
126
169
  onFocus
127
170
  } = this.props;
128
- this.onInputExcuted = false;
171
+ this.onInputExecuted = false;
129
172
  Object.defineProperty(e, 'detail', {
130
173
  value: {
131
174
  value: e.target.value
@@ -155,7 +198,7 @@ class Input extends React__default.Component {
155
198
  value
156
199
  } = e.target;
157
200
  const keyCode = e.keyCode || e.code;
158
- this.onInputExcuted = false;
201
+ this.onInputExecuted = false;
159
202
  if (typeof onKeyDown === 'function') {
160
203
  Object.defineProperty(e, 'detail', {
161
204
  value: {
@@ -178,11 +221,27 @@ class Input extends React__default.Component {
178
221
  handleComposition(e) {
179
222
  e.stopPropagation();
180
223
  if (!(e.target instanceof HTMLInputElement)) return;
181
- if (e.type === 'compositionend') {
182
- this.isOnComposition = false;
183
- this.handleInput(e);
184
- } else {
224
+ if (e.type === 'compositionstart') {
225
+ // 开始输入中文,标记进入拼音输入状态
226
+ this.isOnComposition = true;
227
+ } else if (e.type === 'compositionupdate') {
228
+ // 拼音输入过程中,保持标记并更新显示
185
229
  this.isOnComposition = true;
230
+ // 必须在这里触发 setState 才能让输入框里的拼音实时更新
231
+ this.handleInput(e);
232
+ } else if (e.type === 'compositionend') {
233
+ // 中文选词结束,退出拼音输入状态
234
+ this.isOnComposition = false;
235
+ // 立即获取最终值
236
+ const newValue = e.target.value;
237
+ // 清空中间状态
238
+ this.setState({
239
+ compositionValue: undefined
240
+ });
241
+ // 设置标记,防止后续的 handleInput 重复触发(适配其他浏览器)
242
+ this.onInputExecuted = true;
243
+ // 强制触发一次 value change,确保父组件收到最终汉字
244
+ this.triggerValueChange(newValue, e);
186
245
  }
187
246
  }
188
247
  render() {
@@ -197,11 +256,14 @@ class Input extends React__default.Component {
197
256
  name,
198
257
  value
199
258
  } = this.props;
259
+ const {
260
+ compositionValue
261
+ } = this.state;
200
262
  const cls = classNames('taro-input-core', 'weui-input', className);
201
- const otherProps = omit(this.props, ['forwardedRef', 'className', 'placeholder', 'disabled', 'password', 'type', 'maxlength', 'confirmType', 'focus', 'name']);
202
- if ('value' in this.props) {
203
- otherProps.value = fixControlledValue(value);
204
- }
263
+ const otherProps = omit(this.props, ['forwardedRef', 'className', 'placeholder', 'disabled', 'password', 'type', 'maxlength', 'confirmType', 'focus', 'name', 'onInput']);
264
+ // 如果有 compositionValue (正在输入拼音),则显示 compositionValue
265
+ // 否则显示 props 传进来的受控 value
266
+ const displayValue = compositionValue !== undefined ? compositionValue : fixControlledValue(value);
205
267
  return /*#__PURE__*/jsx("input", {
206
268
  ref: input => {
207
269
  if (this.props.forwardedRef) {
@@ -216,12 +278,14 @@ class Input extends React__default.Component {
216
278
  disabled: disabled,
217
279
  maxLength: maxlength,
218
280
  name: name,
281
+ value: displayValue,
219
282
  onInput: this.handleInput,
220
283
  onPaste: this.handlePaste,
221
284
  onFocus: this.handleFocus,
222
285
  onBlur: this.handleBlur,
223
286
  onKeyDown: this.handleKeyDown,
224
287
  onCompositionStart: this.handleComposition,
288
+ onCompositionUpdate: this.handleComposition,
225
289
  onCompositionEnd: this.handleComposition,
226
290
  onBeforeInput: this.handleBeforeInput
227
291
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/input/index.tsx"],"sourcesContent":["import './style/index.scss'\n\nimport classNames from 'classnames'\nimport React from 'react'\n\nimport { createForwardRefComponent, omit } from '../../utils'\n\nfunction getTrueType (type: string | undefined, confirmType: string, password: boolean) {\n if (confirmType === 'search') type = 'search'\n if (password) type = 'password'\n if (typeof type === 'undefined') {\n return 'text'\n }\n if (!type) {\n throw new Error('unexpected type')\n }\n if (type === 'digit') type = 'number'\n\n return type\n}\n\nfunction fixControlledValue (value) {\n return value ?? ''\n}\n\ninterface IProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n password?: boolean\n disabled?: boolean\n maxlength?: number\n placeholder?: string\n value?: string\n focus?: boolean\n confirmType?: string\n name?: string\n type?: string\n onConfirm?: (e) => void\n forwardedRef?: React.MutableRefObject<HTMLInputElement>\n}\n\nclass Input extends React.Component<IProps, null> {\n constructor (props) {\n super(props)\n this.handleInput = this.handleInput.bind(this)\n this.handlePaste = this.handlePaste.bind(this)\n this.handleFocus = this.handleFocus.bind(this)\n this.handleBlur = this.handleBlur.bind(this)\n this.handleKeyDown = this.handleKeyDown.bind(this)\n this.handleComposition = this.handleComposition.bind(this)\n this.handleBeforeInput = this.handleBeforeInput.bind(this)\n this.isOnComposition = false\n this.onInputExcuted = false\n }\n\n inputRef: HTMLInputElement\n isOnComposition: boolean\n onInputExcuted: boolean\n\n componentDidMount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef?.addEventListener('change', this.handleInput)\n } else {\n this.inputRef?.addEventListener('textInput', this.handleBeforeInput)\n }\n\n // 处理初始化是否 focus\n if (this.props.focus && this.inputRef) this.inputRef.focus()\n }\n\n componentWillUnmount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef.removeEventListener('change', this.handleInput)\n } else {\n this.inputRef?.removeEventListener('textInput', this.handleBeforeInput)\n }\n }\n\n UNSAFE_componentWillReceiveProps (nextProps: Readonly<IProps>) {\n if (!this.props.focus && nextProps.focus && this.inputRef) this.inputRef.focus()\n }\n\n handleInput (e) {\n e.stopPropagation()\n const {\n type,\n maxlength = 140,\n confirmType = 'done',\n password = false,\n onInput\n } = this.props\n\n if (!this.isOnComposition && !this.onInputExcuted) {\n let { value } = e.target\n const inputType = getTrueType(type, confirmType, password)\n this.onInputExcuted = true\n /* 修复 number 类型 maxLength 无效 */\n if (inputType === 'number' && value && maxlength <= value.length) {\n value = value.substring(0, maxlength)\n e.target.value = value\n }\n\n Object.defineProperty(e, 'detail', {\n value: { value, cursor: value.length }\n })\n // // 修复 IOS 光标跳转问题\n // if (!(['number', 'file'].indexOf(inputType) >= 0)) {\n // const pos = e.target.selectionEnd\n // setTimeout(\n // () => {\n // e.target.selectionStart = pos\n // e.target.selectionEnd = pos\n // }\n // )\n // }\n\n typeof onInput === 'function' && onInput(e)\n this.onInputExcuted = false\n }\n }\n\n handlePaste (e) {\n e.stopPropagation()\n const { onPaste } = this.props\n this.onInputExcuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n typeof onPaste === 'function' && onPaste(e)\n }\n\n handleFocus (e) {\n e.stopPropagation()\n const { onFocus } = this.props\n this.onInputExcuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onFocus && onFocus(e)\n }\n\n handleBlur (e) {\n e.stopPropagation()\n const { onBlur } = this.props\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onBlur && onBlur(e)\n }\n\n handleKeyDown (e) {\n e.stopPropagation()\n const { onConfirm, onKeyDown } = this.props\n const { value } = e.target\n const keyCode = e.keyCode || e.code\n this.onInputExcuted = false\n\n if (typeof onKeyDown === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value,\n cursor: value.length,\n keyCode\n }\n })\n onKeyDown(e)\n }\n\n if (e.keyCode === 13 && typeof onConfirm === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value\n }\n })\n onConfirm(e)\n }\n }\n\n handleComposition (e) {\n e.stopPropagation()\n if (!(e.target instanceof HTMLInputElement)) return\n\n if (e.type === 'compositionend') {\n this.isOnComposition = false\n this.handleInput(e)\n } else {\n this.isOnComposition = true\n }\n }\n\n handleBeforeInput = (e) => {\n if (!e.data) return\n const isNumber = e.data && /[0-9]/.test(e.data)\n if (this.props.type === 'number' && !isNumber) {\n e.preventDefault()\n }\n if (this.props.type === 'digit' && !isNumber) {\n if (e.data !== '.' || (e.data === '.' && e.target.value.indexOf('.') > -1)) {\n e.preventDefault()\n }\n }\n }\n\n render () {\n const {\n className = '',\n placeholder,\n type,\n password = false,\n disabled = false,\n maxlength = 140,\n confirmType = 'done',\n name,\n value\n } = this.props\n const cls = classNames('taro-input-core', 'weui-input', className)\n\n const otherProps = omit(this.props, [\n 'forwardedRef',\n 'className',\n 'placeholder',\n 'disabled',\n 'password',\n 'type',\n 'maxlength',\n 'confirmType',\n 'focus',\n 'name'\n ])\n\n if ('value' in this.props) {\n otherProps.value = fixControlledValue(value)\n }\n\n return (\n <input\n ref={(input: HTMLInputElement) => {\n if (this.props.forwardedRef) {\n this.props.forwardedRef.current = input\n }\n this.inputRef = input\n }}\n {...otherProps}\n className={cls}\n type={getTrueType(type, confirmType, password)}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxlength}\n name={name}\n onInput={this.handleInput}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onKeyDown={this.handleKeyDown}\n onCompositionStart={this.handleComposition}\n onCompositionEnd={this.handleComposition}\n onBeforeInput={this.handleBeforeInput}\n />\n )\n }\n}\n\nexport default createForwardRefComponent(Input)\n"],"names":["getTrueType","type","confirmType","password","Error","fixControlledValue","value","Input","React","Component","constructor","props","handleBeforeInput","e","data","isNumber","test","preventDefault","target","indexOf","handleInput","bind","handlePaste","handleFocus","handleBlur","handleKeyDown","handleComposition","isOnComposition","onInputExcuted","componentDidMount","_a","inputRef","addEventListener","_b","focus","componentWillUnmount","removeEventListener","UNSAFE_componentWillReceiveProps","nextProps","stopPropagation","maxlength","onInput","inputType","length","substring","Object","defineProperty","cursor","onPaste","onFocus","onBlur","onConfirm","onKeyDown","keyCode","code","HTMLInputElement","render","className","placeholder","disabled","name","cls","classNames","otherProps","omit","_jsx","ref","input","forwardedRef","current","maxLength","onCompositionStart","onCompositionEnd","onBeforeInput","createForwardRefComponent"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/input/index.tsx"],"sourcesContent":["import './style/index.scss'\n\nimport classNames from 'classnames'\nimport React from 'react'\n\nimport { createForwardRefComponent, omit } from '../../utils'\n\nfunction getTrueType (type: string | undefined, confirmType: string, password: boolean) {\n if (confirmType === 'search') type = 'search'\n if (password) type = 'password'\n if (typeof type === 'undefined') {\n return 'text'\n }\n if (!type) {\n throw new Error('unexpected type')\n }\n if (type === 'digit') type = 'number'\n\n return type\n}\n\nfunction fixControlledValue (value) {\n return value ?? ''\n}\n\ninterface IProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n password?: boolean\n disabled?: boolean\n maxlength?: number\n placeholder?: string\n value?: string\n focus?: boolean\n confirmType?: string\n name?: string\n type?: string\n onConfirm?: (e) => void\n forwardedRef?: React.MutableRefObject<HTMLInputElement>\n}\n\ninterface IState {\n compositionValue?: string\n}\n\n\n/**\n * 谷歌浏览器: compositionstart -> onChange -> compositionend\n * 其他浏览器: compositionstart -> compositionend -> onChange\n * 普通按键 (A-Z): handleInput -> setState(compositionValue) -> UI 更新。\n * 空格选词 (中文输入法): compositionend -> triggerValueChange(外部回调) -> onInputExecuted = true -> 紧随其后的 handleInput 被拦截退出。\n */\n\nclass Input extends React.Component<IProps, IState> {\n constructor (props) {\n super(props)\n this.state = {\n compositionValue: undefined\n }\n\n this.handleInput = this.handleInput.bind(this)\n this.handlePaste = this.handlePaste.bind(this)\n this.handleFocus = this.handleFocus.bind(this)\n this.handleBlur = this.handleBlur.bind(this)\n this.handleKeyDown = this.handleKeyDown.bind(this)\n this.handleComposition = this.handleComposition.bind(this)\n this.handleBeforeInput = this.handleBeforeInput.bind(this)\n this.isOnComposition = false\n // onInputExecuted 标记用于防止某些浏览器的事件重复触发\n this.onInputExecuted = false\n }\n\n inputRef: HTMLInputElement\n isOnComposition: boolean\n onInputExecuted: boolean\n\n componentDidMount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef?.addEventListener('change', this.handleInput)\n } else {\n this.inputRef?.addEventListener('textInput', this.handleBeforeInput)\n }\n\n // 处理初始化是否 focus\n if (this.props.focus && this.inputRef) this.inputRef.focus()\n }\n\n componentWillUnmount () {\n // 修复无法选择文件\n if (this.props.type === 'file') {\n this.inputRef.removeEventListener('change', this.handleInput)\n } else {\n this.inputRef?.removeEventListener('textInput', this.handleBeforeInput)\n }\n }\n\n UNSAFE_componentWillReceiveProps (nextProps: Readonly<IProps>) {\n if (!this.props.focus && nextProps.focus && this.inputRef) this.inputRef.focus()\n }\n\n /**\n * 处理 maxLength 逻辑并调用 props.onInput\n */\n triggerValueChange (value: string, e: any) {\n const {\n type,\n maxlength = 140,\n confirmType = 'done',\n password = false,\n onInput\n } = this.props\n\n let finalValue = value\n const inputType = getTrueType(type, confirmType, password)\n\n /* 修复 number 类型 maxLength 无效 */\n if (inputType === 'number' && finalValue && maxlength <= finalValue.length) {\n finalValue = finalValue.substring(0, maxlength)\n // 如果被截断了,需要同步回 DOM\n if (e.target && e.target.value !== finalValue) {\n e.target.value = finalValue\n }\n }\n\n // 只有当值确实改变,或者需要强制触发时才调用\n if (typeof onInput === 'function') {\n Object.defineProperty(e, 'detail', {\n value: { value: finalValue, cursor: finalValue.length },\n configurable: true\n })\n // // 修复 IOS 光标跳转问题\n // if (!(['number', 'file'].indexOf(inputType) >= 0)) {\n // const pos = e.target.selectionEnd\n // setTimeout(\n // () => {\n // e.target.selectionStart = pos\n // e.target.selectionEnd = pos\n // }\n // )\n // }\n onInput(e)\n }\n }\n\n handleInput (e) {\n e.stopPropagation()\n // 如果是 compositionend 刚刚触发过的,这里消费掉标记并退出,防止双重触发\n // 适配其他浏览器的 compositionend -> onChange 顺序\n if (this.onInputExecuted) {\n this.onInputExecuted = false\n return\n }\n\n const newValue = e.target.value\n\n if (this.isOnComposition) {\n // Case 1: 正在拼写中文(compositionstart 已触发但 compositionend 未触发)\n // 只更新组件内部 State,让 Input 显示拼音,不触发外部 onChange\n // 适配谷歌浏览器的 compositionstart -> onChange -> compositionend 顺序\n this.setState({ compositionValue: newValue })\n } else {\n // Case 2: 普通输入 (英文、数字、或中文选词后)\n // 标记执行,防止重复\n this.onInputExecuted = true\n\n // 清理中间状态\n if (this.state.compositionValue !== undefined) {\n this.setState({ compositionValue: undefined })\n }\n\n this.triggerValueChange(newValue, e)\n this.onInputExecuted = false\n }\n }\n\n handlePaste (e) {\n e.stopPropagation()\n const { onPaste } = this.props\n this.onInputExecuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n typeof onPaste === 'function' && onPaste(e)\n }\n\n handleFocus (e) {\n e.stopPropagation()\n const { onFocus } = this.props\n this.onInputExecuted = false\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onFocus && onFocus(e)\n }\n\n handleBlur (e) {\n e.stopPropagation()\n const { onBlur } = this.props\n Object.defineProperty(e, 'detail', {\n value: {\n value: e.target.value\n }\n })\n onBlur && onBlur(e)\n }\n\n handleKeyDown (e) {\n e.stopPropagation()\n const { onConfirm, onKeyDown } = this.props\n const { value } = e.target\n const keyCode = e.keyCode || e.code\n this.onInputExecuted = false\n\n if (typeof onKeyDown === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value,\n cursor: value.length,\n keyCode\n }\n })\n onKeyDown(e)\n }\n\n if (e.keyCode === 13 && typeof onConfirm === 'function') {\n Object.defineProperty(e, 'detail', {\n value: {\n value\n }\n })\n onConfirm(e)\n }\n }\n\n handleComposition (e) {\n e.stopPropagation()\n if (!(e.target instanceof HTMLInputElement)) return\n\n if (e.type === 'compositionstart') {\n // 开始输入中文,标记进入拼音输入状态\n this.isOnComposition = true\n } else if (e.type === 'compositionupdate') {\n // 拼音输入过程中,保持标记并更新显示\n this.isOnComposition = true\n // 必须在这里触发 setState 才能让输入框里的拼音实时更新\n this.handleInput(e)\n } else if (e.type === 'compositionend') {\n // 中文选词结束,退出拼音输入状态\n this.isOnComposition = false\n // 立即获取最终值\n const newValue = e.target.value\n\n // 清空中间状态\n this.setState({ compositionValue: undefined })\n\n // 设置标记,防止后续的 handleInput 重复触发(适配其他浏览器)\n this.onInputExecuted = true\n\n // 强制触发一次 value change,确保父组件收到最终汉字\n this.triggerValueChange(newValue, e)\n }\n }\n\n handleBeforeInput = (e) => {\n if (!e.data) return\n const isNumber = e.data && /[0-9]/.test(e.data)\n if (this.props.type === 'number' && !isNumber) {\n e.preventDefault()\n }\n if (this.props.type === 'digit' && !isNumber) {\n if (e.data !== '.' || (e.data === '.' && e.target.value.indexOf('.') > -1)) {\n e.preventDefault()\n }\n }\n }\n\n render () {\n const {\n className = '',\n placeholder,\n type,\n password = false,\n disabled = false,\n maxlength = 140,\n confirmType = 'done',\n name,\n value\n } = this.props\n\n const { compositionValue } = this.state\n\n const cls = classNames('taro-input-core', 'weui-input', className)\n\n const otherProps = omit(this.props, [\n 'forwardedRef',\n 'className',\n 'placeholder',\n 'disabled',\n 'password',\n 'type',\n 'maxlength',\n 'confirmType',\n 'focus',\n 'name',\n 'onInput'\n ])\n\n // 如果有 compositionValue (正在输入拼音),则显示 compositionValue\n // 否则显示 props 传进来的受控 value\n const displayValue = compositionValue !== undefined\n ? compositionValue\n : fixControlledValue(value)\n\n return (\n <input\n ref={(input: HTMLInputElement) => {\n if (this.props.forwardedRef) {\n this.props.forwardedRef.current = input\n }\n this.inputRef = input\n }}\n {...otherProps}\n className={cls}\n type={getTrueType(type, confirmType, password)}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxlength}\n name={name}\n value={displayValue}\n onInput={this.handleInput}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onKeyDown={this.handleKeyDown}\n onCompositionStart={this.handleComposition}\n onCompositionUpdate={this.handleComposition}\n onCompositionEnd={this.handleComposition}\n onBeforeInput={this.handleBeforeInput}\n />\n )\n }\n}\n\nexport default createForwardRefComponent(Input)\n"],"names":["getTrueType","type","confirmType","password","Error","fixControlledValue","value","Input","React","Component","constructor","props","handleBeforeInput","e","data","isNumber","test","preventDefault","target","indexOf","state","compositionValue","undefined","handleInput","bind","handlePaste","handleFocus","handleBlur","handleKeyDown","handleComposition","isOnComposition","onInputExecuted","componentDidMount","_a","inputRef","addEventListener","_b","focus","componentWillUnmount","removeEventListener","UNSAFE_componentWillReceiveProps","nextProps","triggerValueChange","maxlength","onInput","finalValue","inputType","length","substring","Object","defineProperty","cursor","configurable","stopPropagation","newValue","setState","onPaste","onFocus","onBlur","onConfirm","onKeyDown","keyCode","code","HTMLInputElement","render","className","placeholder","disabled","name","cls","classNames","otherProps","omit","displayValue","_jsx","ref","input","forwardedRef","current","maxLength","onCompositionStart","onCompositionUpdate","onCompositionEnd","onBeforeInput","createForwardRefComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tarojs/components-react",
3
- "version": "4.1.10-beta.0",
3
+ "version": "4.1.10-beta.13",
4
4
  "description": "",
5
5
  "main:h5": "dist/index.js",
6
6
  "main": "dist/index.js",
@@ -29,9 +29,9 @@
29
29
  "identity-obj-proxy": "^3.0.0",
30
30
  "swiper": "11.1.15",
31
31
  "tslib": "^2.6.2",
32
- "@tarojs/components": "4.1.10-beta.0",
33
- "@tarojs/shared": "4.1.10-beta.0",
34
- "@tarojs/taro": "4.1.10-beta.0"
32
+ "@tarojs/components": "4.1.10-beta.13",
33
+ "@tarojs/shared": "4.1.10-beta.13",
34
+ "@tarojs/taro": "4.1.10-beta.13"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@babel/plugin-transform-runtime": "^7.24.1",
@@ -47,8 +47,8 @@
47
47
  "jest-environment-jsdom": "^29.7.0",
48
48
  "solid-js": "^1.8.16",
49
49
  "ts-jest": "^29.1.1",
50
- "@tarojs/helper": "4.1.10-beta.0",
51
- "@tarojs/runtime": "4.1.10-beta.0"
50
+ "@tarojs/runtime": "4.1.10-beta.13",
51
+ "@tarojs/helper": "4.1.10-beta.13"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "react": "*",