如何更改输入字段值,使其不会在每次更改时贯穿整个 Redux 状态更新周期
How do I change input field value the way it doesn't run through the whole Redux state update cycle every time it is changed?
>我有一个组件,它有一个绑定到应用程序状态的输入字段,如下所示
import {updateTitle} from '../actions/sales';
class Sale extends Component {
onTitleChange(event) {
const {value} = event.target;
const {id} = this.props;
this.props.updateTitle(id, value);
}
render() {
return (
<input
placeholder="The Title"
value={this.props.title}
onChange={::this.onTitleChange} />
);
}
}
export default connect(({sales}) => ({
title: sales.title
}), {
updateTitle
}))(Sale);
但是标记要重得多。
一切都很好,除了当我尝试快速在此字段中键入内容时,浏览器会显着滞后,因为每个输入更改(这意味着每次按键(都贯穿从事件处理程序到动作创建者、实际动作、化简器、到商店更新、组件道具更新和渲染的整个循环。它超级慢。有什么方法可以优化吗?
我错过了一些明显的东西吗?
我尝试使用作为道具值传递onChange
去反弹函数,但这样,应用程序状态根本不会更新。我还尝试使用组件级状态和setState
以及应用程序级状态,但我认为这种方法与 Redux 的想法相矛盾,因此不应使用。
React 组件可以受控或不受控制。受控输入将其值作为 prop 接收,并为值中的每个更改触发事件处理程序。不受控制的控件将用户输入保留在本地状态,并触发事件处理程序以进行更改。
您的输入目前是受控的,但如果您想将更改保留在本地,为什么不使其不受控制呢?然后,您可以在用户完成键入时在 onBlur 事件中调用 updateTitle,或者在用户键入时取消反弹 onChange 事件以降低调用 updateTitle 的频率。
您至少有两个选项。第一个:尝试连接到更靠近输入组件的 redux 存储(这样受更改时不受值更新影响的组件更少(
通常,尽管我们将中间值存储在父组件状态中,并且偶尔将值刷新(如正常的去抖动(到redux存储中,或者在类似onBlur之类的东西上执行此操作。因此,在每次更改时更新状态值,并偶尔将值刷新到存储区。它涉及更多注意确保值同步,但这些是优化热路径的一些权衡。
相关文章:
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- Angular:更新一次性绑定的数据
- Javascript更新孙窗口中的表单元素
- 使用AngularJS中的筛选器更新给定的表
- AngularJS摘要周期偶尔无法更新范围
- 更新数据时的React.js生命周期
- 如何更改输入字段值,使其不会在每次更改时贯穿整个 Redux 状态更新周期
- “不是函数”来自周期更新程序的停止函数的错误
- 如何在不触发模型生命周期回调的情况下更新SailsJS中的记录
- 在$作用域上定义的变量直到下一个周期才更新
- iOS6 Mobile Safari: geolocation.watchPosition的准确性和更新周期