在 React/Redux 中分派操作时有没有好的方法来防止默认情况?

2024-03-15

我正在调度一个操作,该操作运行一个减速器,在表单提交时将一些文本推送到我的 redux 状态。我知道在 Vue 中你可以preventDefault就在 DOM 中,但我在 React 中没有看到任何东西可以让这看起来成为可能。

我想知道阻止表单提交的最佳方法,以便 Redux 可以做到这一点。我的代码如下。谢谢!

动作/index.js

export function addLink(text) {
    return {
        type: 'ADD_LINK',
        text
    }
}

reducers/index.js (ADD_LINK) 是我正在运行的函数

/*eslint-disable*/
export function linkList(state = [], action) {
    switch(action.type) {
        case 'ADD_LINK': 
            var text = action.text;
            console.log('Adding link');
            console.log(text);
            return {
                ...state,
                links: [text, ...state.links]
            };
        case 'DELETE_LINK':
            var index = action.index;
            console.log('Deleting link');
            return {
                ...state,
                links: [
                    ...state.links.slice(0, index),
                    ...state.links.slice(index + 1)
                ],
            };
        case 'UPDATE_LINK':
            var index = action.index;
            var newText = action.newText;
            console.log(action.newText);
            console.log(action.index);
            return {
                ...state,
                links: [ 
                    ...state.links.slice(0, index),
                    newText,
                    ...state.links.slice(index + 1)
                ],
            }
        default: 
            return state;
    }
};

export default linkList;

Components/LinkInput.js(这是我调度 onSubmit 操作的位置)

import React, { Component } from 'react';

class LinkInput extends Component {
  constructor(props) {
    super(props);
    this.state = {
        text: '',
    };
  }
  handleChange(e) {
    e.preventDefault();
    this.setState({
        text: e.target.value
    });
  }
  render() {
    return (
        <form className="form form-inline" onSubmit={this.props.data.addLink.bind(null, this.state.text)} style={styles.form}>
          <div className="form-group">
            <label className="label" htmlFor="exampleInputName2" style={styles.label}>Add a link: </label>
            <input type="text" className="input form-control" onChange={this.handleChange.bind(this)} style={styles.input}/>
          </div>
          <button type="submit" className="button btn btn-primary" style={styles.button}>Add link</button>
        </form>
    );
  }
}

导出默认的 LinkInput;


我要做的就是在您的组件中定义一个名为的函数_onSubmit并让它像这样:

_onSubmit(e) {
  e.preventDefault();
  this.props.data.addLink(this.state.text)
}

然后你的表单组件只使用this._onSubmit为其onSubmit处理程序

<form className="form form-inline" onSubmit={this._onSubmit} style={styles.form}>

这将处理该事件并调度正确的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React/Redux 中分派操作时有没有好的方法来防止默认情况? 的相关文章

随机推荐

  • 空比较

    有一个查询 UPDATE MyTable SET nvarchar1 blahblah WHERE Id 096fe792 7313 416f b3c8 327f46be73b6 AND nvarchar1 lt gt blablah 当
  • 使用 Delphi 检测互联网连接激活

    我使用 3G 无线卡已经有一段时间了 每次连接时 我的防病毒软件都会启动更新 我想知道我可以使用哪些 Win32 API 函数集来获取通知或查询即将出现的 Internet 连接事件 Delphi 已经有一组移植的标头了吗 我参与了一个项目
  • 如何将无边框表单对齐到屏幕边缘?

    当我将窗体的边框样式设置为无时 我无法再将窗口捕捉到屏幕边缘 我怎样才能两者兼得 Aero Snap 需要一个有边框的窗口 没有后门 您可以使用以下代码来模拟捕捉这个帖子 https stackoverflow com a 591734 1
  • ruby/ruby on Rails 内存泄漏检测

    我使用 ruby on Rails 编写了一个小型 Web 应用程序 其主要目的是上传 存储和显示 xml 文件最多可达几 MB 文件的结果 运行大约 2 个月后 我注意到杂种进程使用了 大约 4GB 内存 我做了一些关于调试 ruby 内
  • 单页网站上复杂的活动状态导航

    HTML div class logo ribbon a href top a div
  • 为什么用 p.then(resolve) 比用resolve(p) 更早地解决新的 Promise?

    Code 1 和 Code 2 之间的区别是 Code 1 使用resolve p 和代码 2 使用p then gt resolve 我希望输出的序列是不变的 但它们会生成不同的序列 我不明白为什么 代码 1 resolve p cons
  • javac 类路径顺序与 Oracle 文档相矛盾?

    In 塞拉 贝茨 SCJP https rads stackoverflow com amzn click com 0071591060本书第 797 页 java 和 javac 首先查看包含 Java SE 标准类的目录 然后他们查看类
  • AJAX 按钮提交的 HTML5 表单验证

    我有以下表格 我喜欢新的 HTML5 表单验证 并且更愿意保留它 然而 我不喜欢按下按钮时刷新页面 表单提交 的方式 相反 我更愿意使用按钮触发一些 AJAX 来刷新页面元素 而不刷新整个页面 然而 当我设置type button 发生的情
  • Android - 使用 LocationManager.requestLocationUpdates 时,我需要 WakeLock 吗?

    我的应用程序使用警报定期检查位置BroastcastReceiver启动一个服务 我知道我应该在启动服务之前获取唤醒锁 但我的问题是我什么时候可以释放它 如果我在调用后释放唤醒锁requestLocationUpdates 设备是否可以进入
  • 将一次性代码交换为刷新令牌时出现 Google OAuth redirect_uri_mismatch

    我正在实现 Google OAuth2 服务器一次性代码流程 如下所述 https developers google com identity sign in web server side flow https developers g
  • 如何处理 iOS 中的 Firebase 数据库错误? #AskFirebase

    我需要以不同于所有其他错误的方式处理 权限被拒绝 错误 在 Android 中我已经做到了 Kotlin override fun onCancelled error DatabaseError if error code Database
  • AVAudioPlayer 声音未播放

    在 iOS 8 Xcode 6 中 我有一个包含声音效果的功能 多次更改代码后 它在 iOS 9 中不再起作用 这是我尝试过的 原来的 let bangSoundEffect SKAction playSoundFileNamed Bang
  • Android Studio 2 错误:app:compileDebugJavaWithJack

    这是 Android Studio 2 1 1 的完整错误 我知道这段代码可以编译 因为在其他 PC 上它可以编译 但在 Windows 10 x64 的这台 PC 上却不行 所有其他项目都以类似的结果失败 Error Execution
  • php代码到mysql数据库导出[重复]

    这个问题在这里已经有答案了 可能的重复 最佳实践 在 PHP 中导入 mySQL 文件 分割查询 https stackoverflow com questions 1883079 best practice import mysql fi
  • hibernate 主键的原语或包装器

    我一直在查看各种 hibernate 教程和示例 对于它们的标识 主键属性 有些使用 Java 原始类型 有些使用包装类型 即 private int id vs private Integer id 为什么以及何时使用其中一个作为实体键
  • Asp.net Core 电子邮件确认有时会显示 InvalidToken

    我正在使用 asp net core Identity 2 1 我遇到了电子邮件确认的随机问题 而电子邮件确认有时会说结果 Error InvalidToken 令牌也没有过期 Note 我们正在使用多个服务器 并且我们还将密钥存储在一个地
  • 如何让顶部的大图片变小并最终粘在顶部?

    我想将我的网站分为两部分 包含大图像的标题和包含其他图像 文本等的主要部分 当我滚动页面时 标题上的大图像应该与主要部分一起滚动 在某一时刻 图像应该变得固定 并且主要部分在其后面滚动 我尝试了一些不同的方法 但我无法获得位置 显示 顶部等
  • d3 js - 将气泡聚集到分段

    最新小提琴 https jsfiddle net tk5xog0g 8 https jsfiddle net tk5xog0g 8 第二次摆弄自定义图表 随机将气泡放置在靠近区域的区域 但不能考虑重叠或从中心图表区域脱落的情况 http j
  • 从日期时间中删除分钟 - sql

    DECLARE MinutesToAdd int 20 DECLARE StartTimeDate datetime 2017 06 05 14 37 56 113 DATEADD minute MinutesToAdd StartTime
  • 在 React/Redux 中分派操作时有没有好的方法来防止默认情况?

    我正在调度一个操作 该操作运行一个减速器 在表单提交时将一些文本推送到我的 redux 状态 我知道在 Vue 中你可以preventDefault就在 DOM 中 但我在 React 中没有看到任何东西可以让这看起来成为可能 我想知道阻止