#reactjs
#reactjs
Вопрос:
Я получаю некоторую информацию и помещаю в свое состояние react. Я могу регистрировать данные в состоянии react, но на моем дисплее не отображается вывод для {singleEmployee}
… Может ли это быть ошибкой в react версии 16.8.5
import React from 'react';
var Airtable = require('airtable');
var base = new Airtable({apiKey: ''}).base('');
class Firm extends React.Component {
constructor(props) {
super(props);
this.state = {
name:props.location.firm.firmName,
year:props.location.firm.yearFounded,
address:props.location.firm.officeAddress,
website:props.location.firm.website,
aum:props.location.firm.aum,
check:props.location.firm.checkSize,
employees:props.location.firm.employees,
focus:props.location.firm.detailedFirmSpecialisations,
loaded:false,
employeesInfo:null,
};
}
componentDidMount(){
const ids = this.state.employees
const employeesInfo = [];
ids.forEach((id)=>{
base('EmploymentHistory').find(id, (err, record)=>{
if (err) {
console.error(err);
return;
}
employeesInfo.push({
name:record.get('Employment ID'),
job:record.get('Job Title'),
investment:record.get('Investment lookup'),
dateStarted: `${record.get('Start Month (1-12)')} ${record.get('Start Year')}`
})
})
})
console.log(employeesInfo)
this.setState({
employeesInfo:employeesInfo,
loaded:false
},()=>
this.setState({
loaded:true
})
)
}
render() {
const {name,year,address,website,aum,check,focus,employeesInfo,loaded} = this.state;
{loaded amp;amp; console.log(employeesInfo)}
const singleEmployee = employeesInfo amp;amp; employeesInfo.map(employee=>{
return <h4 key={employee.name}> Name is {employee.name}</h4>
})
if(!loaded){
return(
<div>loading...</div>
)
}
return (
<div>
<h2>{name ? name : 'N/A'} Audit Report</h2>
<h4>Year Founded {year ? year : 'N/A'}</h4>
<h4>Address {address ? address : 'N/A'}</h4>
<h4>Website {website ? website : 'N/A'}</h4>
<h4>AUM {aum ? aum : 'N/A'}</h4>
<h4>Cheque Size {check ? check : 'N/A'}</h4>
<h4>Investment Focus {focus ? focus : 'N/A'}</h4>
<h2>Employees</h2>
{singleEmployee}
</div>
);
}
}
Комментарии:
1. Пожалуйста, покажите значение
employeesInfo
2. Похоже, что
employeesInfo
это объект, но вы выполняете итерацию по нему сmap
, как если бы это был массив3. это массив … проверьте весь код
4. Вы пытаетесь выписать список всех сотрудников, потому что неясно, где вы находите интересующего вас сотрудника.
5. Вам следует добавить некоторые выходные данные и дополнительные пояснения к тому, что вы хотите сделать и как.
Ответ №1:
Поскольку employeesInfo
это массив, вам нужно будет взять элемент по индексу, например
const singleEmployee = employeesInfo amp;amp; (<h4 key={employeesInfo[0].name}> Name is {employeesInfo[0].name}</h4>)
приведенный здесь код:
const singleEmployee = employeesInfo amp;amp; employeesInfo.map(employee=>{
return <h4 key={employee.name}> Name is {employee.name}</h4>
})
В singleEmployee
будет сохранен массив элементов react, а не один элемент
Похоже, что сначала вам следует найти элемент в employeesInfo
, но у вас нет для него идентификатора.
Я сделал для вас скрипку с более простой версией того, чего вы пытаетесь достичь:https://jsfiddle.net/9L8u7fex /
Комментарии:
1. Теперь он просто печатается
Name is
без имени сотрудников … а employeesInfo — это массив объектов employee2. что возвращает console.log(employeesInfo)?
3. он регистрирует массив всех сотрудников в массиве ie.
0: {name: "Else Thomson (1969)", job: Array(1), investment: Array(1), dateStarted: "6 2005"} length: 1 __proto__: Array(0)
4. Да, конечно, проблема в том, что вы пытаетесь записать одну запись employee, когда у вас на самом деле есть их массив.
5. Здесь я сопоставляю массив
employeesInfo.map(employee=>{ return <h4 key={employee.name}> Name is {employee.name}</h4> })
Ответ №2:
Я думаю, что код для отображения employInfo не имеет никаких проблем. Проблема, с которой вы сталкиваетесь здесь, заключается в том, как вы добавляете больше значений в массив, который выполняется асинхронно. Я бы посоветовал вам сохранить список в состоянии.
вы можете обратиться к моему образцу в sandboxhttps://codesandbox.io/s/0v3xo8p4yp. если вы закомментируете параметр setTemp, который на самом деле запускает новый рендеринг только после того, как я обновлю список. Если вы закомментируете этот код, новый список никогда не появится в dom. Я думаю, что это очень похоже на вашу проблему
Комментарии:
1. У вас есть объяснение, в котором не используются перехватчики react
2. вы имеете в виду мой образец? как я объяснил в своем ответе, я использовал hook только для запуска повторного запуска, и я прокомментировал это в своем коде, показывающем, что новый список не отображается. Если вы раскомментируете его, то увидите, что новый список отображается