我试图从父组件检测表单状态是否脏,因此如果表单值已更改,我只能显示提交按钮。

初始渲染按预期显示 false,但更改值不会触发使用新 vlaue 重新渲染。

import React from 'react'
import { isDirty } from 'redux-form'
import { connect } from 'react-redux'

<Parent>
  { props.isDirty ? <SubmitButton /> : null }
  <Form {...etc} />
</Parent>

const mapStateToProps = state => ({
  ...
  isDirty: isDirty('myForm')(state),
})

export default connect(mapStateToProps, null)(Parent)

控制台日志记录 props.isDirty 显示在 <Parent/> 的初始渲染时 isDirty 为假。但是,更改值不会触发使用新值重新渲染 <Parent/>

更新:

经过进一步调查,我认为这是一个错误:
const mapStateToProps = (state) => {
  console.log(isDirty('myForm')(state)
  return {
    ...
    isDirty: isDirty('myForm')(state),
  }

在这里,更改表单值会按预期触发 mapStateToProps,但 isDirty 始终为 false。

最佳答案

哦!不是错误。我导入了错误的、可变的 isDirty 选择器..
import { isDirty } from 'redux-form/immutable'
..解决了问题

关于reactjs - Redux-form v6 isDirty(和 isPristine)选择器不会在状态改变时触发重新渲染,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43585141/

10-11 05:46