#json #reactjs #ag-grid-react
#json #reactjs #ag-grid-реагировать
Вопрос:
Я разработчик .NET, создающий свое первое приложение ReactJS / AgGrid, и у меня есть ВЕБ-API, возвращающий JSON на основе следующего:
public class CarbonCostsView
{
public DateTime TradeDate { get; set; }
public Int16 HourEnding { get; set; }
public List<CarbonCosts> CarbonCosts { get; set; }
}
Я пытаюсь разобрать возвращенный JSON на три объекта, но не знаю как. В конечном счете, первые два элемента (TradeDate и HourEnding) будут объединены в сообщение заголовка..
JSON выглядит следующим образом:
{
"tradeDate":"2019-04-02T00:00:00",
"hourEnding":5,
"carbonCosts":[
{
"id":101,
"displayName":"Delta 1X0",
"tradeDate":"2019-04-02T00:00:00",
"hourEnding":5,
"manMin":10.410000,
"base":7.380000,
"db":null,
"pag":null
},
{
"id":102,
"displayName":"Delta 1X1",
"tradeDate":"2019-04-02T00:00:00",
"hourEnding":5,
"manMin":7.120000,
"base":5.230000,
"db":null,
"pag":null
}
]
}
И вот JS, представляющий ReactJS / AgGrid .
const columnDefs = [
{ headerName: "Plant", field: "plantName", width: 120, rowGroup: true, sortable: true, filter: true },
{ headerName: "Man Min", field: "manMin", width: 80 },
{ headerName: "Base", field: "base", width: 100 },
{ headerName: " DB", field: "db", width: 100 },
{ headerName: " PAG", field: "pag", width: 100 },
{ headerName: " RA", field: "ra", width: 100 },
];
class App extends Component {
constructor() {
super();
this.state = {
columnDefs: columnDefs,
header: {}
}
}
componentDidMount() {
fetch('http://localhost:53884/api/OperationalCosts')
.then(result => result.json())
.then(rowData => this.setState({ rowData }))
}
render() {
console.log(this.state.rowData);
return (
<div
className="ag-theme-balham"
style={{
height: '700px',
width: '1000px'
}}
>
<h1> Carbon Costs</h1>
<AgGridReact
columnDefs={this.state.columnDefs}
rowData={this.state.rowData}>
</AgGridReact>
</div>
);
}
}
Я подозреваю, что «магия», которую я ищу, происходит здесь? Что где-нибудь в этом разделе я могу разбить JSON на три отдельных объекта?
.then(result => result.json())
.then(rowData => this.setState({ rowData }))
Комментарии:
1. Вы на правильном пути. Продолжайте. Ваше состояние — это сам объект. Таким образом, вы можете сделать smt следующим образом
.setState({obj1: value, obj2: value, obj3: value })
2. .затем(результат => result.json()) .затем(rowData =>{ // творите здесь свою магию … this.setState({rowData :updatedRowData}}))
3. при желании вы можете уничтожить свой ответ в разных объектах, а затем установить свое состояние. Посмотрите здесь wesbos.com/destructuring-objects
Ответ №1:
Что ж, похоже, ответ таков:
class App extends Component {
constructor() {
super();
this.state = {
columnDefs: columnDefs,
header: {}
}
}
componentDidMount() {
fetch('http://localhost:53884/api/OperationalCosts')
.then(result => result.json())
.then(foobar => this.setState(
{ TradeDate: foobar.TradeDate,
HourEnding: foobar.HourEnding,
CarbonCosts: foobar.carbonCosts }))
}
render() {
return (
<div
className="ag-theme-balham"
style={{
height: '700px',
width: '1000px'
}}
>
<h1> Carbon Costs</h1>
<AgGridReact
columnDefs={this.state.columnDefs}
rowData={this.state.CarbonCosts}>
</AgGridReact>
</div>
);
}
}
Спасибо, что подтолкнули меня в правильном направлении.
(Все еще кажется очень неудобным: ReactJS — и js в целом — мне чужды)