Tôi muốn thực hiện thả xuống với phản ứng và redux. Dropdown sẽ là một phần của thành phần khác, do đó, nó thực sự "Dumb" thành phần. Nhưng trình đơn thả xuống nên gọi tới api để tìm nạp các mục, áp dụng các bộ lọc tùy chỉnh và v.v. Các cuộc gọi Api phải được xác thực, các mã thông báo đã lưu trữ trạng thái toàn cầu. Tôi có nên chuyển mã thông báo cho các đạo cụ thành phần không? Hoặc có một cách tốt hơn để làm điều này?Thực hiện cuộc gọi api từ các thành phần câm với Redux
Trả lời
Một thành phần câm, theo định nghĩa, nên câm: có nghĩa là nó nên lấy mọi thứ cần "từ trên cùng", tức là thông qua các đạo cụ.
Chỉ thành phần "thông minh" ("được kết nối" với Redux), lên cấp bậc, sẽ xử lý việc tìm nạp dữ liệu bằng hành động mới (async), sau đó sửa đổi trạng thái khi trả về cuộc gọi API, tái render thành phần Dumb của bạn với các đạo cụ mới của nó.
Vì vậy, trong Redux:
- phần Dumb của bạn phải mất hai đạo cụ: một với các giá trị đến từ API của bạn (mà thực sự là một phần của bạn "nhà nước"), một trong những khác một hàm được gọi khi thả xuống các mục đã chọn của bạn thay đổi.
<MyDumbComponent data={this.props.data} onChange={this.onChange.bind(this)} />
- Sau đó, thành phần "thông minh" lên phân cấp sẽ nghe hàm onChange đó và gửi Hành động (FETCH_DATA)
- Hành động (async) sẽ gọi API và khi nhận dữ liệu, hãy gọi một Hành động khác (FETCH_DATA_SUCCESS) với dữ liệu
- Sau đó, Redux, với bộ giảm tốc, sẽ cập nhật trạng thái của nó từ tải trọng Hành động
- Điều này sẽ kết xuất lại Thành phần của bạn với đạo cụ mới (dữ liệu mới).
Bạn có thể muốn đọc: http://redux.js.org/docs/basics/UsageWithReact.html
Và liên quan đến hành động async: http://redux.js.org/docs/advanced/AsyncActions.html
phần Dumb không có nghĩa là nó có thể làm bất cứ điều gì giống như lấy thông tin cập nhật, nó có nghĩa là nó 'câm' đến khái niệm về redux và không biết gì về cửa hàng của bạn hoặc thư viện bạn đang sử dụng. Lợi ích là bạn có thể thay đổi việc thực hiện thông lượng của mình và bạn chỉ có một chút công việc để cập nhật các thành phần thông minh.
Đối với loại kịch bản bạn mô tả, bạn sẽ cung cấp cho <Menu>
một chức năng thông qua các đạo cụ sẽ chạy khi <Menu>
muốn cập nhật dữ liệu. <Menu>
không biết gì về Redux - nó chỉ thực hiện một chức năng - nhưng nó vẫn có thể tìm nạp dữ liệu mới. Tùy thuộc vào sự phức tạp, bạn có thể chuyển qua trình tạo hành động thô (ràng buộc với dispatchAction) và chạy nó.
import * as dataActions from './actions';
// We have dataActions.fetchItems() which is the action creater to get new items.
// Attach items, and the action creator (bound to dispatch) to props
@connect((store) => {
return {items: store.data.items}
}, dataActions)
class ItemsPage extends Component {
static propTypes = {
items: PropTypes.object, // the items from the store, from @connect
fetchItems: PropTypes.func // action dispatcher, from @connect
}
render() {
return (<Menu onChange={this.props.fetchItems} />)
}
}
// Our 'dumb' component that doesnt know anything about Redux,
// but is still able to update data (via its smart parent)
class Menu extends Component {
static propTypes = {
onChange: PropTypes.func // same as fetchItems
}
render() {
return (<button onClick={this.props.onChange}>Update items</button>);
}
}
- 1. Xử lý các cuộc gọi api trong Redux với Axios
- 2. Làm thế nào để thực hiện đúng các cuộc gọi REST từ ứng dụng ReactJS + Redux?
- 3. Thực hiện cuộc gọi REST API từ IntentService hoặc AsyncTask?
- 4. Nock không chặn cuộc gọi API trong kiểm tra Redux
- 5. Angular2/ngrx và các cuộc gọi API
- 6. Nơi để thực hiện cuộc gọi mạng trong ứng dụng phản ứng + redux
- 7. API Web để thực hiện cuộc gọi điện thoại
- 8. Thực hiện cuộc gọi WCF với AJAX
- 9. Thực hiện nhiều cuộc gọi fb.api
- 10. Java API để thực hiện cuộc gọi điện thoại
- 11. Lỗi CORS trong khi thực hiện cuộc gọi axios.get
- 12. Các cuộc gọi API Mocking và Win32
- 13. Thực hiện các cuộc gọi đồng bộ trong Silverlight WP7
- 14. Cuộc gọi API proxy nhanh với cookie
- 15. Thực hiện các cuộc gọi lồng nhau để "thực hiện" với thư viện Fabric của Python
- 16. thực hiện cuộc gọi ajax trên window.unload
- 17. điều chỉnh các cuộc gọi http api với độ trễ
- 18. Thực hiện cuộc gọi hệ thống gắn kết từ perl
- 19. CakePHP 2.1 thực hiện một cuộc gọi jquery ajax với thành phần an ninh được kích hoạt
- 20. Làm cách nào để thực hiện cuộc gọi AJAX giữa nhiều miền với API Google Maps?
- 21. Các cuộc gọi chức năng như gọi(), write() các cuộc gọi hệ thống thực trong linux?
- 22. Cách thực hiện cuộc gọi REST từ Google Chrome
- 23. android - Cách thực hiện cuộc gọi điện thoại từ webview
- 24. Thực hiện cuộc gọi cURL trong C#
- 25. Thực hiện lại cuộc gọi API Web không thành công khi nhấp vào nút Thử lại trên cửa sổ bật lên phương thức trong Góc 2 và tiếp tục thực hiện nếu cuộc gọi thành công trên 'Thử lại'
- 26. Thực hiện cuộc gọi JSON tới Pandora API không chính thức
- 27. Cách thực hiện cuộc gọi ajax với angular2/http
- 28. Thực hiện cuộc gọi OpenGL dư thừa
- 29. Làm cách nào để thực hiện cuộc gọi JSONP với JQuery với Xác thực cơ bản?
- 30. Tách trình xác thực và dịch vụ với các cuộc gọi API bên ngoài