Tôi đang phá vỡ ví dụ todo của Redux để cố gắng hiểu nó. Tôi đọc rằng mapDispatchToProps
cho phép bạn lập bản đồ các hành động điều phối làm đạo cụ, vì vậy tôi đã nghĩ đến việc viết lại addTodo.js
để sử dụng mapDispatchToProps thay vì gọi công văn (addTodo ()). Tôi đã gọi nó addingTodo()
. Một cái gì đó như thế này:
import React from 'react';
import {connect} from 'react-redux';
import addTodo from '../actions';
let AddTodo = ({addingTodo}) => {
let input;
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
addingTodo(input.value)
input.value = ""
}}>
<input ref={node => {
input = node
}} />
<button type="submit">Submit</button>
</form>
</div>
)
}
const mapDispatchToProps = {
addingTodo: addTodo
}
AddTodo = connect(
mapDispatchToProps
)(AddTodo)
export default AddTodo
Tuy nhiên, khi tôi chạy ứng dụng, tôi nhận được lỗi này: Error: Invalid value of type object for mapStateToProps argument when connecting component AddTodo.
. Tôi chưa từng mapStateToProps
bắt đầu với thành phần AddTodo, vì vậy tôi không chắc chắn điều gì đã xảy ra. Cảm giác ruột của tôi nói rằng điều đó connect()
mong đợi sẽ mapStateToProps
xảy ra trước đó mapDispatchToProps
.
Bản gốc đang hoạt động trông như thế này:
import React from 'react';
import {connect} from 'react-redux';
import addTodo from '../actions';
let AddTodo = ({dispatch}) => {
let input;
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
dispatch(addTodo(input.value))
input.value = ""
}}>
<input ref={node => {
input = node
}} />
<button type="submit">Submit</button>
</form>
</div>
)
}
AddTodo = connect()(AddTodo)
export default AddTodo
Hoàn thành repo có thể được tìm thấy ở đây .
Vì vậy, câu hỏi của tôi là, có thể thực hiện mapDispatchToProps mà không cần mapStateToProps không? Điều tôi đang cố gắng thực hiện có phải là một thực hành được chấp nhận - nếu không, tại sao không?