返回 1. 利用
2. 借助
React 受控输入值巧改指南:利用 JavaScript 轻松变更
javascript
2024-03-15 15:18:39
使用 JavaScript 巧妙更改 React 受控输入值
问题
React,作为一种声明式的 UI 库,管理组件状态依靠 props 和 state。直接使用 JavaScript 修改受控组件的 DOM 值,React 无法察觉该更改,导致表单提交时出错。
解决方法
想要使用 JavaScript 代码更改 React 受控输入值,有两种方法:
1. 利用 ref
属性
ref
属性让你直接访问组件的 DOM 节点,从而能够用 JavaScript 操作它。
2. 借助 setState()
方法
setState()
方法可更新组件的 state,进而触发 React 重新渲染,更新 DOM。
详细步骤
使用 ref
属性
import React, { useRef } from 'react';
const MyInput = (props) => {
const inputRef = useRef(null);
const handleChange = (e) => {
inputRef.current.value = e.target.value;
};
return (
<input ref={inputRef} onChange={handleChange} {...props} />
);
};
在 Chrome 扩展程序或控制台中:
const input = document.querySelector('input[ref="inputRef"]');
input.value = 5;
使用 setState()
方法
import React, { useState } from 'react';
const MyInput = () => {
const [value, setValue] = useState('');
const handleChange = (e) => {
setValue(e.target.value);
};
return (
<input onChange={handleChange} value={value} />
);
};
在 Chrome 扩展程序或控制台中:
const input = document.querySelector('input');
input.dispatchEvent(new Event('change', { bubbles: true }));
示例代码
const inp = document.querySelector('input[ref="inputRef"]');
inp.value = 5;
const btn = document.querySelector('button[type="submit"]');
btn.click();
注意事项
- 确保扩展程序或脚本有权访问目标网站。
- 不要直接修改受控输入的 DOM 值,以免造成 React 失步。
- 使用
setState()
时,传递新对象或用扩展运算符更新 state,防止浅比较。
常见问题解答
-
为什么使用
ref
属性?
ref
属性允许直接访问 DOM 节点,进行直接操作。 -
为什么使用
setState()
方法?
setState()
方法更新组件 state,触发 React 重新渲染。 -
为什么不要直接修改受控输入的 DOM 值?
直接修改会导致 React 无法察觉更改,造成表单提交错误。 -
如何确保脚本有权访问目标网站?
确保扩展程序或脚本拥有必要的权限来与目标网站交互。 -
除了这两种方法,还有其他方法吗?
还有其他方法,但这些方法更复杂且不建议使用。