Итерация объекта в массиве useState в цикле - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю над проектом React, у меня проблема с динамическим c созданием компонента с useState;

Сначала я получаю адрес данных из Ethereum и по этому адресу в for l oop получение данных из IPFS, и я хочу сохранить эти данные для использования массива объекта State.

Это функция, которая получает адрес из Ethereum:

patientstorage.deployed().then(function(contractInstance){
    contractInstance.getPatientContractAddressByPatientName(usnameByte32).then(function(result){
        const PatientContract = new web3.eth.Contract(Patient.abi,result)
        PatientContract.methods.getConsultationsIpfsList().call({from: ethereum.selectedAddress}).then(function(result){
            console.log("Consul IPFSes:", result)
            for(var i=0; i<result.length; i++){
                console.log(ethers.utils.toUtf8String(result[i]))
                IPFSREADER(result[i]);
            }
        })
    });
})

и это моя функция IPFSREADER, получение данных из IPFS и установка useState:

const [consul, setConsul] = useState([])
const [count, setCount] = useState(0);

function IPFSREADER(element){
    let convertedIPFSaddress = ethers.utils.toUtf8String(element)
    ipfs.cat(convertedIPFSaddress).then(function(result){
        console.log('ipfs.cat result:', result)
        let cons = result.toString('utf8')
        const parsed = JSON.parse(cons);
        console.log("cons:",parsed)
        setConsul([parsed,...consul])
        console.log("cons:",consul)
    })
}

consul - это все мои данные, которые считываются из хранилища IPFS. Когда я печатаю это так:

<Card bg="dark">
  <Card.Header>
    {consul.date} {consul.time}
  </Card.Header>
  <Card.Body>
    <blockquote className="blockquote mb-0">
      <p> Doctor:{consul.doctorName} </p>
      <p> Address:{consul.addr} </p>
      <p> Disease:{consul.disease} </p>
      <p> medicine:{consul.medicine} </p>
      <footer className="blockquote-footer">
        Someone famous in <cite title="Source Title">Source Title</cite>
      </footer>
    </blockquote>
  </Card.Body>
</Card>;

Теперь, проблема здесь, когда я хочу создать массив объектов useState, с setConsul([parsed,...consul]) этим кодом в IPFSREADER он всегда возвращает пустой массив, поэтому я не могу использовать этот useState для рендеринга компонента Dynami c с map. Можете ли вы помочь мне, что я могу сделать для создания массива объектов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...