iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Software Development

.NET Core與React組合開發技系列 第 16

.NET Core與React組合開發技_第16天_React整併axios呼叫api獲取產品詳細頁

  • 分享至 

  • xImage
  •  

在此微調我們的ProductController

將ProductDetailsModel多增加一個Price屬性
更改Details Action要返回的資料Model

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace MyReact1.Controllers
{
    //  -> /api/Product
    [Route("api/[controller]")]
    [ApiController]
    public class ProductController : ControllerBase
    {
        public IActionResult List()
        {
            var model = new ProductModel
            {
                Products = new List<ProductModel.ProductListItem> {
                    new ProductModel.ProductListItem{Id = 1, Name = "The first", Description="product 1"}
                }
            };
            return Ok(model);
        }
        //  -> /api/Product/10
        [HttpGet("{id}")]
        public IActionResult Details(int id)
        {
            return Ok(new ProductDetailsModel
            {
                Id = id,
                Name = "A product",
                Description = "Description",
                Price = 1000
            });

        }
    }

    public class ProductModel
    {
        public List<ProductListItem> Products { get; set; } = new List<ProductListItem>();

        public class ProductListItem
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
        }

    }

    public class ProductDetailsModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public decimal Price { get; set; }
    }

}

再到
~\ClientApp\src\components\ProductDetail.js
引入Axios來進行API存取

import React, { Component } from 'react';
import Axios from 'axios';
export default class ProductDetails extends Component {
    constructor(props) {
        super(props);

        this.state = {};
    }

    async componentDidMount() {
        let result = await Axios(`https://localhost:7247/api/product/${this.props.match.params.id}`);
        this.setState(result.data);
    }

    render() {
        return <div className="row">
            <div className="col-12">
                <div className="media">
                    <img src="https://via.placeholder.com/600" className="mr-3" alt="Product" />
                    <div className="media-body">
                        <h1>{this.state.name}</h1>
                        <p>{this.state.description}</p>
                        <p>£{this.state.price}</p>
                    </div>
                </div>
            </div>
        </div>

    }
}

在此可針對js偵錯觀察回傳結果
https://ithelp.ithome.com.tw/upload/images/20220928/20107452HhE5yx8xAk.png

最終就可以成功資料綁定於頁面中
https://ithelp.ithome.com.tw/upload/images/20220928/20107452ozS5Lom5XK.png


上一篇
.NET Core與React組合開發技_第15天_Component LifeCycle & Hook
下一篇
.NET Core與React組合開發技_第17天_重構_從controller抽離業務邏輯
系列文
.NET Core與React組合開發技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言