@bond_1013
Начинающий веб-разработчик

Как обновить данные в redux c асинхронной функции?

У меня есть walletReducer, который может изменяться в зависимости от действий юзера, к примеру когда сменить кошелек я должен обновить его адрес и баланс на сайте. Получаю эти данные я в асинхронной функции и сейчас обновление не получается.

const walletDefaultState = {
  web3: {},
  account: "",
  balance: "",
};

const CONNECT_BY_METAMASK = "CONNECT_BY_METAMASK";
const WALLET_CONNECT = "WALLET_CONNECT";

export const walletReducer = (state = walletDefaultState, action) => {
  switch (action.type) {
    case CONNECT_BY_METAMASK:
      return { ...state, ...action.payload };
    case WALLET_CONNECT:
      return { ...state, cash: state.cash - action.payload };
    default:
      return state;
  }
};

export const connectByMetaMaskAction = (payload) => ({
  type: CONNECT_BY_METAMASK,
  payload,
});


import Web3 from "web3";
import { connectByMetaMaskAction } from "../../store/walletReducer";

export function createWeb3Listeners() {
  if (window.ethereum) {
    window.ethereum.on("accountsChanged", async () => {
      console.log("accountsChanged");
      const web3 = new Web3(window.ethereum);
      let accounts = await web3.eth.getAccounts();
      let balance = await web3.eth.getBalance(accounts[0]);
      dispatch(connectByMetaMaskAction({ web3, accounts, balance }));
    });

    window.ethereum.on("chainChanged", () => {
      console.log("chainChanged");
    });

    window.ethereum.on("disconnect", () => {
      console.log("disconnect");
    });
  }
}
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
yespeace
@yespeace
Uncle Bob’s Nephew
Для асинхронной логики вам нужно подключить библиотеку redux-thunk или подобную ей,
потому что actions в Redux они синхронные по умолчанию
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы