Thể hiện dữ liệu trong thành phần: thành phần Feed
1) Vai trò của thành phần Feed
Trong chương 4. Soạn hợp đồng thông minh Klaystagram, ta đã viết cấu trúc PhotoData và đặt nó trong ánh xạ _photoList. Vai trò của thành phần Feed như sau: 1. Đọc PhotoData thông qua gọi phương pháp hợp đồng Klaystagram (redux/actions/photos.js) 2. Thể hiện PhotoData(nguồn cấp dữ liệu) với thông tin của chủ sở hữu (components/Feed.js)
2) Đọc dữ liệu từ hợp đồng: phương pháp getPhoto
Gọi phương pháp hợp đồng: getTotalPhotoCount()
Nếu không có ảnh, hãy gọi hàm setFeed với một mảng trống.
Gọi phương pháp hợp đồng: getPhoto(id)
Nếu có ảnh, lấy dữ liệu mỗi ảnh làm promise và đẩy nó vào mảng nguồn cấp dữ liệu. Khi tất cả promise đã được xử lý, quay lại mảng nguồn cấp dữ liệu.
Gọi hoạt động redux: setFeed(feed)
Lấy mảng nguồn cấp dữ liệu đã xử lý và lưu vào cửa hàng redux.
// src/redux/actions/photos.jsconstsetFeed= (feed) => ({ type:SET_FEED, payload: { feed },})exportconstgetFeed= () => (dispatch) => {// 1. Gọi phương pháp hợp đồng(READ): `getTotalPhotoCount()`// Nếu không có dữ liệu ảnh, hãy gọi hàm `setFeed` với mảng trốngKlaystagramContract.methods.getTotalPhotoCount().call().then((totalPhotoCount) => {if (!totalPhotoCount) return []constfeed= []for (let i = totalPhotoCount; i >0; i--) {// 2. Gọi phương pháp hợp đồng(READ):`getPhoto(id)`// Nếu có dữ liệu ảnh, hãy gọi tất cảconstphoto=KlaystagramContract.methods.getPhoto(i).call()feed.push(photo) }returnPromise.all(feed) }).then((feed) => {// 3. Gọi hàm: `setFeed(feed)`// Lưu dữ liệu ảnh(nguồn cấp dữ liệu) vào cửa hàngdispatch(setFeed(feedParser(feed)) })}
3) Lưu dữ liệu vào cửa hàng: hành động setFeed
Sau khi tìm nạp thành công dữ liệu ảnh (nguồn cấp dữ liệu) từ hợp đồng Klaystagram, ta gọi hành động setFeed(feed). Hành động này lấy dữ liệu ảnh làm tải trọng và lưu vào cửa hàng redux.
4) Hiển thị dữ liệu trong thành phần: thành phần Feed
Ở lần đầu tiên, bạn chỉ có thể thấy lời nhắn "Không có ảnh :D" vì chưa có dữ liệu ảnh trong hợp đồng.
Hãy tạo một thành phần UploadPhoto để gửi dữ liệu ảnh đến hợp đồng!