将属性映射到react-redux中的状态

2024-04-23

我有一个使用的组件state向用户提供数据。例如<div>this.state.variableInState</div>。该组件可以调度一些方法(例如onClick行动)。我目前正在使用react-redux an connect映射方法store to props。有什么办法我可以setState发货后?

// actions
export function executeAction() {
  return function (dispatch, getState) {
    dispatch({
      type: 'MY_ACTION',
      payload: axios.get('/some/url')
    });
  };
}
// reducer

export default function (state = {}, action) {
  switch (action.type) {
    case 'MY_ACTION_FULFILLED':
      return {...state, myVariable: action.payload.data}
  }
}
//component
class MyComponent extends Component {
  render() {
    (<div onClick={this.props.executeAction.bind(this)}>
      {this.state.variableInState}
      </div>)
  }

  someOtherMethod() {
    // I want to operate with state here, not with props
    // that's why my div gets state from this.state instead of this.props
    this.setState({variableInState: 'someValue'})
  }
}


export default connect((state, ownProperties) => {
  return {
    // So I want to change MyComponent.state.variableInState here
    // but this method updates MyComponent props only
    // What can I do?
    variableInProps: state.myVariable
  }
}, {executeAction})(MyComponent);

无论我理解什么,您想要做的就是将组件的 props 转换为组件自己的状态。您可以随时将组件的 props 更改为组件的状态componentWillReceiveProps组件中的生命周期方法是这样的。

//component
class MyComponent extends Component {
  componentWillReceiveProps(newProps){
     if(newProps.variableInProps != this.props.variableInProps){
         this.setState({variableInState: newProps.variableInProps })
     }
  }
  render() {
    (<div onClick={this.props.executeAction.bind(this)}>
      {this.state.variableInState}
      </div>)
  }

  someOtherMethod() {
    // I want to operate with state here, not with props
    // that's why my div gets state from this.state instead of this.props
    this.setState({variableInState: 'someValue'})
  }
}


export default connect((state, ownProperties) => {
  return {
    // So I want to change MyComponent.state.variableInState here
    // but this method updates MyComponent props only
    // What can I do?
    variableInProps: state.myVariable
  }
}, {executeAction})(MyComponent);

componentWillReceiveProps每当组件有新的 props 时,react 都会执行该方法,因此这是根据 props 更新组件状态的正确位置。

UPDATE :

The componentWillReceiveProps已被弃用。因此,您可以使用以下方法来代替此方法componentDidUpdate方法来做到这一点。componentDidUpdate方法将之前的 props 和之前的状态作为参数。所以你可以检查 props 的变化,然后设置状态。

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

将属性映射到react-redux中的状态 的相关文章

  • 如何使用 OR 逻辑(而不是 AND)过滤表列

    小提琴示例 http jsfiddle net fks37 我有一个 html 表 A B C D 0 1 0 1 0 1 0 0 1 0 0 1 我要过滤non zero列 使用 jQuery dataTables 不是硬性要求 只是我当
  • 角度 ng-messages 仅在 $touched 为 true 时显示

    我并没有做任何太特别的事情 我有一个输入 需要在每次击键时进行验证 如果验证失败 则显示错误 不要等待模糊事件来触发 touched 我以为这是默认情况 但显然不是 我正在使用有角度的材料和有角度的消息 我这样做是为了大写锁定检测 标记
  • 同步迭代 javascript 对象

    我有一个像这样的对象 let myObject db1 db1 file1Id db1 file2Id db 1file3Id db2 db2 file1Id db2 file2Id 我遍历这个对象并在每次迭代中 我连接到数据库 检索文件
  • Fabric JS html 5 图像弯曲选项

    我想用html5工具制作图像曲线 我使用 Fabric js 作为 html5 画布工具 请指导我如何在杯子 玻璃 圆柱形或圆形产品等图像上制作弯曲图像 参考号图片如下 http vsdemo cwwws com Images Produc
  • 运行玩笑测试时,Firebase 在signInAnonymously() 上抛出“auth/network-request-failed”

    我正在使用 firebase 为我的应用程序 使用 create react app 构建 编写一些测试 并且我正在尝试匿名登录我的测试数据库 但认证失败 然而 所有其他 Firebase 操作 CRUD 都工作得很好 我还可以从在浏览器中
  • 如何从数组中删除空数组值(“”)?

    我有一个二维数组 是用 jQuery 从 html 表生成的 但有些值是空的 所以 被展示 如何删除空值 table tr th 1A th th 1B th th 1C th tr tr td 2A td td 2B td td 2C t
  • 为响应中的特定槽位提供槽位值并恢复对话

    我正在处理 lex 并希望在响应中给出槽值 只有当用户在前一个槽值中输入特定输入时才会询问该值 我正在尝试一些事情 但我不这样做 我做得对还是错 我在 lex 中有以下插槽 出发城市 到达城市 出发 单程或往返 归期 日期 出发日期 航班时
  • IE 抛出 JavaScript TypeError 但在 chrome 上不抛出

    描述在我们的 Magento 购物车上 当用户单击添加到购物篮在任何 Internet Explorer 浏览器的 产品详细信息 页面上单击按钮 浏览器中都会弹出一个包含以下错误消息的窗口 异常 类型错误 无法获取未定义或空引用的属性 ta
  • 量角器未连接到 DevTools

    当我的页面从 Protractor 运行时 如何使用 Chrome 开发者工具来检查它 当我尝试打开开发工具时 我从量角器收到此错误 UnknownError disconnected not connected to DevTools S
  • Redux 中的排队操作

    我目前遇到的情况是我需要连续运行 Redux Actions 我看过各种中间件 比如 redux promise 看起来不错如果您知道触发根操作 由于缺乏更好的术语 时的连续操作是什么 本质上 我想维护一个可以随时添加的操作队列 每个对象在
  • 需要帮助在 D3.js 条形图中将 x 轴刻度与条形对齐

    我有一个可用的线性条形图D3 js http d3js org 它也有基于时间的 x 轴 条形图绑定到计数属性 而轴绑定到日期属性 轴上的刻度未与条形对齐 知道如何将它们两者排列起来吗 这是 jsFiddle http jsfiddle n
  • Knockout.js——理解 foreach 和 with

    我一直在阅读 learn knockout js 教程并进行实验 有人可以解释为什么这有效吗 教程 单页应用程序 步骤 2 使用with chosenFolderData and foreach mails table class mail
  • 使用 JavaScript 检测硬重新加载

    为了澄清 I am not试图区分刷新和重新加载 因此这不是重复的刷新与重新加载 https stackoverflow com questions 5004978 check if page gets reloaded or refres
  • 计算 DIV 元素的最大/最小高度

    问题 给定一个具有固定高度的 DIV 元素 其中包含未知数量的子元素 这些子元素的大小相对于其高度 计算 DIV 可以调整大小的最大 最小高度 而不违反其子元素的任何最大 最小值元素 Example求 DIV A 的最大 最小高度 Answ
  • 脚本内的角度范围

    我们可以使用脚本标记内范围中定义的角度变量 如下所示 HTML 代码 div div JS CODE function AngularCtrl scope scope user name John 我只是得到 scope 未定义 有人可以帮
  • React-Router v4 渲染错误的组件但匹配正确

    我有一个带有两个按钮的侧边栏 测试 和 关于 Test 火箭图标 呈现在 test 处 About 主页图标 呈现在 处 它们都位于应用程序的根目录并嵌套在组件内 当我从 开始并单击 链接到 test 时 它总是加载 关于 组件 当我检查
  • 0x800a138f - JavaScript 运行时错误:无法获取未定义或 null 引用的属性“值”

    我编写了一段 JavaScript 代码来比较 2 个文本框中的 2 个日期 function CompareDates var fdate document getElementById txtFromDate var edate doc
  • 提交后清除 React 中的表单

    我试图在使用 Axios 创建表单提交后清除表单数据 消息处理良好 响应记录到页面 但每个文本字段中的数据在提交后仍保留在页面上 我尝试添加一个resetForm函数 我将表单设置回原来的空白状态 但这不起作用 import React C
  • AngularJs 位置路径更改,无需重置所有控制器

    我的问题的简短版本是 如何更改 URL 而不需要触发路由更改或不需要运行当前显示页面上的所有控制器 Details 我有一个模板 显示在
  • 未捕获的类型错误:未定义不是 indexOf 上的函数

    我目前有此代码来检查特定 ID 的网站 URL GET 选项 但每当运行此代码时 我都会收到一个奇怪的错误 Uncaught TypeError Undefined is not a function 这是我的代码 如果我能得到关于这个问题

随机推荐

  • 重定向后的 HTTP 响应代码

    有一个到服务器的信息重定向 一旦来自服务器的响应 我想检查 HTTP 代码以抛出异常 如果有任何以 4XX 开头的代码 为此 我需要知道如何从标头中仅获取 HTTP 代码 这里还涉及到服务器的重定向 所以我担心curl 对我来说没有用 到目
  • Java 链表数组

    我正在尝试编写一个可以允许多个值的自定义哈希表 我们正在通过以下方式进行 创建大小为 Integer MAX 的链表数组 自定义链表 将值 int 插入到编号为键编号的链接列表中 表示结构如下 value1 gt value6 NULL N
  • 无法在 iPhone 6 上打开 Apple Pay 表

    我想制作一个示例项目 当用户单击我的应用程序上的 使用 Apple Pay 付款 按钮时 该项目会打开 Apple Pay 表 我在配备 iOs 版本 8 1 包含 Apple Pay 和 Xcode 6 1 GM 的 iPhone 6 上
  • 如何检测 android RecyclerView 中的 OverScroll?

    我尝试覆盖 onOverScrolled 但它没有被触发 public class MyRecyclerView extends RecyclerView public MyRecyclerView NonNull Context cont
  • 将 ed25519 私钥 ssh 转换为 RSA 私钥

    我正在寻找使用将 ed25519 私钥转换为 rsa 私钥ssh keygen I found 这个有用的指南 https man openbsd org ssh keygen但我无法弄清楚如何指定输入格式为 ed25519 并且导出格式应
  • 用 C++ 发出声音(嘟嘟声)

    如何用c 使硬件发出蜂鸣声 打印特殊字符 ASCII BEL 代码7 cout lt lt a Source https bytes com topic c answers 127539 making computer speaker be
  • 如何在align环境中标记每个方程?

    我想知道如何在对齐环境中标记每个方程 例如 begin align label eq lnnonspbb lambda i mu i 0 mu i xi i 0 lambda i y i w T x i b 1 xi i 0 end ali
  • 我可以 POST 和 GET 到同一个 PHP 页面吗

    例如 我想知道是否可以在同一个 php 页面上进行 GET 和 POST 我想将数据发送到 http www example com my php 所以首先是 GET http www example com my php task dos
  • 使用VBS脚本检查字符串是否包含特定字符

    我的脚本正在做以下几点 检索所有我选择的文件夹文件 按日期对它们进行分类 从最近的到较早的 在窗口中显示它们 这是我的 VBS 脚本 我检索它here http codes sources commentcamarche net sourc
  • tkinter .after() 秒和分

    大家好 我在 tkinter 中制作计时器时遇到问题 但我无法使用time sleep 所以我用 after 我有新问题 我输入了一个条目 我希望条目编号为 60 在设定时间之后 将写入一条文本 内容如下 gt gt time is ove
  • Excel 单元格值作为 SQL 查询 where 语句

    我对 SQL 很陌生 我想使用此查询将数据从 SQL Server 导入到 Excel SELECT Model Factory TargetTime TotalEvalMins FROM AMSView WHERE WeekNumber
  • CoreImage坐标系

    I have CVPixelBufferRef从一个AVAsset 我正在尝试申请CIFilter到它 我用这些行 CVPixelBufferRef pixelBuffer CVPixelBufferRef newPixelBuffer e
  • 有条件地设置对象属性

    是否有一些根据条件设置属性的语法 data userId 7 actionId 36 express myCondition true null does not work I want express要么设置为一个值 要么根本不设置 即
  • ListView.builder 在颤振中按像素底部溢出

    这就是我使用的方式ListView builder它被纳入Column with Expanded小部件 我尝试了一些解决方案 但它们不起作用 这是一个动态列表 return Container child Column crossAxis
  • 从 Visual Studio 运行时,STARTUPINFO.wShowWindow 为 0

    我在调试名为 Notepad2 的开源记事本替代品中的功能时偶然发现了一个问题 更具体地说 是一个名为 Notepad2 的更新版本 Notepad2 mod https github com XhmikosR notepad2 mod 它
  • 无法执行dex:多个dex文件定义Lcom/google/android/gms/ads/AdActivity;

    我正在尝试在我的应用程序中使用谷歌播放服务 我在我的应用程序和 BaseGameUtils 中都引用了 google play services 库 并且我无法执行 dex 多个 dex 文件定义 Lcom google android g
  • CFP 对 /Library/Preferences 的引用

    我在系统偏好设置中使用了 prefpane 带有授权锁 我需要了解我的偏好并写信给 Library Preferences 但是 每当我尝试将首选项同步到kCFPreferencesAnyUser and kCFPreferencesCur
  • Windows().Activate 超出范围错误

    我的宏中有一些代码如下 ChDir File pth Workbooks Open filename File pth open tkt Workbooks Open filename File pth closed tkt ActiveS
  • 从 xml 文件中获取所有 img 标签(jquery)

    我有以下 xml 文件
  • 将属性映射到react-redux中的状态

    我有一个使用的组件state向用户提供数据 例如 div this state variableInState div 该组件可以调度一些方法 例如onClick行动 我目前正在使用react redux an connect映射方法sto