我在下面发布了一个答案,但如果有人能解释为什么这是必要的,你会得到赏金,我经历了一个 redux 教程,感觉我没有了解mapDispatchToProps
, 只有mapStateToProps
. 如果你能在更深层次上解释究竟是什么mapStateToProps
,mapDispatchToProps
正在做什么以及它们有何不同,我会给你赏金。
我有一个看起来像的 mapStateToProps 函数
const mapStateToProps = state => {
return {
firstName: state.firstName,
middleName: state.middleName,
lastName: state.lastName,
}
}
const ReduxTabForm = connect(mapStateToProps)(MyTab)
在我的MyTab
组件中,我有一个按钮,如果这两个字段没有输入任何内容,则该按钮应该是非活动的,但是按钮是否被禁用的状态不会改变
function App() {
const {firstName, lastName} = store.getState().formData
const isDisabled = () => {
const {firstName, lastName} = store.getState().form
const requiredFields = [firstName, lastName]
alert(requiredFields)
for(let i = 0; i < requiredFields.length; i=i+1){
if (!requiredFields[i]){
return true
}
}
return false
}
return (
<div className="App">
<div className='bg-light rounded'>
<div className='px-sm-5 pt-0 px-4 flexCenterCol mx-5'>
<div>
<input
type='text'
className="form-control"
value={store.getState().formData['firstName']}
placeholder="First Name"
onChange={(e) => {
store.dispatch(setFormData({'firstName': e.target.value}))
}}
></input>
<input
type='text'
className="form-control"
value={store.getState().formData['lastName']}
placeholder="Last Name"
onChange={(e) => {
store.dispatch(setFormData({'lastName': e.target.value}))
}}
></input>
</div>
<button
type="submit"
disabled={isDisabled()}
>
Button
</button>
</div>
</div>
</div>
)
}
该警报语句在页面刷新时执行,但在我输入数据后不会执行任何时间。我已经检查了 redux 状态是否正在更新。但是按钮不会更新,并且 isDisabled 函数不会运行多次