Tìm việc làm nhanh & Tuyển dụng hiệu quả
0Chat
Quay lại

Redux là gì? Khái niệm cách thức hoạt động và thông tin A đến Z

Tác giả: Hà Ngọc Ánh

Ngày cập nhật: 20/04/2021

Redux là gì? Đây là câu hỏi mà rất nhiều lập trình viên đặc biệt là lập trình viên JavaScript quan tâm. Redux là một khuôn khổ để quản lý trạng thái cho ứng dụng web, các thành phần React hiển thị trạng thái đó. Một kho dữ liệu duy nhất chứa trạng thái cho ứng dụng của bạn. Và để hiểu hơn về khái niệm này cũng như các thông tin liên quan về Redux thì bài viết dưới đây chính là dành cho bạn!

Việc làm it

1. Redux là gì? Nguyên tắc hoạt động của nó như thế nào?

Redux là gì? Redux là một vùng chứa trạng thái có thể dự đoán được cho các ứng dụng JavaScript. Khi ứng dụng phát triển, thật khó để giữ cho nó có tổ chức và duy trì luồng dữ liệu. Redux giải quyết vấn đề này bằng cách quản lý trạng thái của ứng dụng với một đối tượng toàn cầu duy nhất được gọi là Store. Các nguyên tắc cơ bản của Redux giúp duy trì tính nhất quán trong suốt ứng dụng của bạn, giúp gỡ lỗi và kiểm tra dễ dàng hơn.

Redux là gì? Nguyên tắc hoạt động của nó như thế nào?
Redux là gì? 

Quan trọng hơn, nó cung cấp cho bạn khả năng chỉnh sửa mã trực tiếp kết hợp với trình gỡ lỗi du hành thời gian. Có thể linh hoạt đi với bất kỳ lớp chế độ xem nào như React, Angular, Vue, … Nguyên tắc của Redux dựa dựa trên khả năng dự đoán của nó. Khả năng dự đoán của Redux được xác định bởi ba nguyên tắc quan trọng nhất được đưa ra dưới đây:

- Nguồn store duy nhất: Trạng thái của toàn bộ ứng dụng của bạn được lưu trữ trong một cây đối tượng trong một cửa hàng duy nhất. Vì toàn bộ trạng thái ứng dụng được lưu trữ trong một cây duy nhất nên việc gỡ lỗi trở nên dễ dàng và phát triển nhanh hơn.

- Trạng thái là “Chỉ đọc”: Cách duy nhất để thay đổi trạng thái là phát ra một hành động, một đối tượng mô tả những gì đã xảy ra. Điều này có nghĩa là không ai có thể trực tiếp thay đổi trạng thái ứng dụng của bạn. Các thay đổi được thực hiện với các chức năng thuần túy.

Redux là gì? Nguyên tắc hoạt động của nó như thế nào?
Nguyên tắc hoạt động của nó như thế nào?

Để chỉ định cách cây trạng thái được chuyển đổi bằng các hành động, bạn viết các bộ giảm thuần túy. Bộ giảm tốc là nơi trung tâm diễn ra việc sửa đổi trạng thái. Reducer là một hàm lấy trạng thái và hành động làm đối số và trả về trạng thái mới được cập nhật.

Xem ngay: Việc làm javascript

2. Cài đặt Redux như thế nào?

Trước khi cài đặt Redux, chúng ta phải cài đặt NodejsNPM. Dưới đây là các hướng dẫn sẽ giúp bạn cài đặt nó. Bạn có thể bỏ qua các bước này nếu bạn đã cài đặt Nodejs và NPM trong thiết bị của mình.  Chạy trình cài đặt, làm theo hướng dẫn và chấp nhận thỏa thuận cấp phép.

Đầu tiên, bạn truy cập vào trang web của Nodejs và tải xuống, cũng như cài đặt tệp gói này. Sau đó bạn khởi động lại thiết bị của bạn để chạy nó. Bạn có thể kiểm tra cài đặt thành công bằng cách mở dấu nhắc lệnh và gõ nút -v. Thao tác này sẽ hiển thị cho bạn phiên bản Node mới nhất trong hệ thống của bạn.

Để kiểm tra xem npm đã được cài đặt thành công hay chưa, bạn có thể nhập npm –v để trả về phiên bản npm mới nhất. Để cài đặt redux, bạn có thể làm theo các bước sau:

- Chạy lệnh sau trong dấu nhắc lệnh của bạn để cài đặt Redux: npm install - lưu redux.

- Để sử dụng Redux với ứng dụng react, bạn cần cài đặt thêm một phần phụ thuộc như sau: npm install --save react-redux.

- Để cài đặt các công cụ dành cho nhà phát triển cho Redux, bạn cần cài đặt phần phụ thuộc sau: Chạy lệnh dưới đây trong dấu nhắc lệnh của bạn để cài đặt Redux devtools: npm install --save-dev redux-devtools

Cài đặt Redux như thế nào?
Cài đặt Redux như thế nào?

Nếu bạn không muốn cài đặt các công cụ dành cho nhà phát triển Redux và tích hợp nó vào dự án của mình, bạn có thể cài đặt Phần mở rộng Redux DevTools cho Chrome và Firefox. Mọi đoạn mã trong ứng dụng của bạn không thể thay đổi trạng thái này. Để thay đổi trạng thái, bạn cần gửi một Redux core. Một hành động là một đối tượng đơn giản mô tả ý định gây ra thay đổi với một thuộc tính kiểu. Nó phải có thuộc tính type cho biết loại hành động nào đang được thực hiện.

Các hành động và trạng thái được tổ chức cùng nhau bởi một chức năng gọi là Bộ giảm tốc. Một hành động được thực hiện với ý định gây ra thay đổi. Sự thay đổi này được thực hiện bởi bộ giảm tốc. Giảm tốc là cách duy nhất để thay đổi trạng thái trong Redux, làm cho nó dễ dự đoán, tập trung và dễ gỡ lỗi hơn. Một hàm rút gọn xử lý hành động “ITEMS_REQUEST”.

Tham khảo ngay: Việc làm nodejs

3. Cách thức làm việc của Redux như thế nào?

Redux tuân theo luồng dữ liệu một chiều. Nó có nghĩa là dữ liệu ứng dụng của bạn sẽ tuân theo luồng dữ liệu ràng buộc một chiều. Khi ứng dụng phát triển và trở nên phức tạp, thật khó để tái tạo các vấn đề và thêm các tính năng mới nếu bạn không kiểm soát được trạng thái ứng dụng của mình. Redux giảm độ phức tạp của mã bằng cách thực thi hạn chế về cách thức và thời điểm cập nhật trạng thái có thể xảy ra. Bằng cách này, quản lý các trạng thái cập nhật rất dễ dàng. Chúng ta đã biết về các hạn chế như ba nguyên tắc của Redux. Sơ đồ sau sẽ giúp bạn hiểu rõ hơn về luồng dữ liệu Redux:

- Người dùng Redux core với ứng dụng khi thực hiện những tương tác của mình.

Cách thức làm việc của Redux như thế nào?
Cách thức làm việc của Redux như thế nào?

- Chức năng rút gọn gốc được gọi với trạng thái hiện tại và hành động được điều động. Bộ giảm tốc gốc có thể phân chia nhiệm vụ cho các chức năng bộ giảm thiểu nhỏ hơn, cuối cùng trả về một trạng thái mới. Bạn có thể xem lại trạng thái này một lần nữa trước khi quyết định có sử dụng nó hay không.

Redux store là một cây đối tượng bất biến trong Redux, là một vùng chứa trạng thái chứa trạng thái của ứng dụng. Redux chỉ có thể có một cửa hàng duy nhất trong ứng dụng của bạn. Bất cứ khi nào một Redux store được tạo trong Redux, bạn cần chỉ định trình giảm bớt.

Các lệnh là các nguồn thông tin duy nhất cho cửa hàng theo tài liệu chính thức của Redux. Nó mang một lượng lớn thông tin từ ứng dụng của bạn để lưu trữ. Như đã thảo luận trước đó, các hành động là đối tượng JavaScript thuần túy phải có thuộc tính type để chỉ ra loại hành động được thực hiện. Nó cho chúng ta biết điều gì đã xảy ra. Các loại phải được định nghĩa là hằng số chuỗi trong ứng dụng của bạn như được cung cấp theo lệnh: const ITEMS_REQUEST = 'ITEMS_REQUEST'.

Ngoài thuộc tính type này, cấu trúc của một đối tượng action hoàn toàn phụ thuộc vào nhà phát triển. Bạn nên giữ đối tượng hành động của mình càng nhẹ càng tốt và chỉ chuyển những thông tin cần thiết. Để thực hiện bất kỳ thay đổi nào trong cửa hàng, trước tiên bạn cần thực hiện một lệnh bằng cách sử dụng hàm store, dispatch. Đối tượng lệnh như sau: {type: GET_ORDER_STATUS, payload: {orderId, userId}} {type: GET_WISHLIST_ITEMS, payload: userId}.

Cách thức làm việc của Redux như thế nào?
Cách thức làm việc của Redux rất đặc biệt

Người tạo hành động là các chức năng gói gọn quá trình tạo một đối tượng hành động. Các hàm này chỉ đơn giản trả về một đối tượng Js thuần túy là một hành động. Nó thúc đẩy việc viết mã sạch và giúp đạt được khả năng tái sử dụng. Trình cho phép một lệnh sẽ là ‘ITEMS_REQUEST’ yêu cầu dữ liệu danh sách mặt hàng sản phẩm từ máy chủ.  Trong khi đó, trạng thái isLoading được thực hiện đúng trong loại hành động ‘ITEMS_REQUEST’ để cho biết các mục đang tải và dữ liệu vẫn không được nhận từ máy chủ.

Ban đầu, trạng thái isLoading là sai trong đối tượng InitialState giả sử không có gì đang tải. Khi dữ liệu được nhận tại trình duyệt, trạng thái isLoading sẽ được trả về là false trong loại hành động ‘ITEMS_REQUEST_SUCCESS’ trong trình rút gọn tương ứng. Trạng thái này có thể được sử dụng như một chỗ dựa trong các thành phần phản ứng để hiển thị trình tải / thông báo trên trang của bạn trong khi yêu cầu dữ liệu được bật.

cv xin việc it

4. Redux — Pure Functions: Hàm trong Redux là gì?

Một hàm là một quá trình nhận đầu vào được gọi là đối số và tạo ra một số đầu ra được gọi là giá trị trả về. Một hàm được gọi là thuần nếu nó tuân theo các quy tắc sau:

- Một hàm trả về cùng một kết quả cho các đối số giống nhau.

- Đánh giá của nó không có tác dụng phụ, tức là nó không làm thay đổi dữ liệu đầu vào.   Không đột biến biến cục bộ và biến toàn cục.

- Nó không phụ thuộc vào trạng thái bên ngoài như một biến toàn cục. Chúng ta hãy lấy ví dụ về một hàm trả về hai lần giá trị được truyền làm đầu vào cho hàm.  Nói chung, nó được viết là, f (x) => x * 2. Nếu một hàm được gọi với giá trị đối số 2, thì đầu ra sẽ là 4, f (2) => 4.

Theo ba nguyên tắc trong Redux, các thay đổi phải được thực hiện bởi một hàm thuần túy, tức là bộ giảm thiểu trong Redux. Bây giờ, một câu hỏi được đặt ra là tại sao một bộ giảm tốc phải là một hàm thuần túy. Giả sử, bạn muốn gửi một hành động có loại là 'ADD_TO_CART_SUCCESS' để thêm một mặt hàng vào ứng dụng giỏ hàng của bạn bằng cách nhấp vào nút thêm vào giỏ hàng.

Redux — Pure Functions: Hàm trong Redux là gì?
Redux — Pure Functions: Hàm trong Redux là gì?

Giảm thiểu là một chức năng thuần túy trong Redux. Các chức năng thuần túy có thể dự đoán được.  Bộ giảm thiểu là cách duy nhất để thay đổi trạng thái trong Redux. Nó là nơi duy nhất mà bạn có thể viết logic và tính toán. Hàm Reducer sẽ chấp nhận trạng thái trước của ứng dụng và hành động đang được gửi đi, tính toán trạng thái tiếp theo và trả về đối tượng mới.

Một số điều sau đây không bao giờ được thực hiện bên trong bộ giảm tốc:

- Sự đột biến của các đối số hàm

- Lệnh gọi API & logic định tuyến

- Gọi hàm không thuần túy v.d. Math.random

Sau đây là cú pháp của một bộ rút gọn: (trạng thái, hành động) => Trạng thái mới

5. Một số thông tin khác về Redux cho bạn

5.1. Relux - phần mềm trung gian

Bản thân Redux là đồng bộ, vậy các hoạt động bất đồng bộ như yêu cầu mạng hoạt động với Redux như thế nào? Đây là phần mềm trung gian có ích gì. Như đã thảo luận trước đó, bộ giảm là nơi ghi tất cả logic thực thi.  Reducer không liên quan đến việc ai thực hiện nó, mất bao nhiêu thời gian hoặc ghi trạng thái của ứng dụng trước và sau khi hành động được thực hiện.

Trong trường hợp này, chức năng phần mềm trung gian của Redux cung cấp một phương tiện để tương tác với hành động được gửi đi trước khi chúng tiếp cận trình giảm thiểu. Các chức năng phần mềm trung gian được tùy chỉnh có thể được tạo ra bằng cách viết các hàm bậc cao (một hàm trả về một hàm khác), nó bao quanh một số logic. Nhiều phần mềm trung gian có thể được kết hợp với nhau để thêm chức năng mới và mỗi phần mềm trung gian không yêu cầu kiến ​​thức về những gì xảy ra trước và sau. Bạn có thể tưởng tượng phần mềm trung gian ở đâu đó giữa hành động được gửi đi và trình giảm thiểu.

Relux - phần mềm trung gian
Relux - phần mềm trung gian

Thông thường, phần mềm trung gian được sử dụng để xử lý các hành động không đồng bộ trong ứng dụng của bạn. Redux cung cấp API được gọi là apply Middleware cho phép chúng ta sử dụng phần mềm trung gian tùy chỉnh cũng như phần mềm trung gian Redux như redux-thunk và redux-promise. Nó áp dụng phần mềm trung gian để lưu trữ. Cú pháp sử dụng API applyMiddleware là: applyMiddleware (... phần mềm trung gian) và điều này có thể được áp dụng để lưu trữ như sau: nhập {createStore, applyMiddleware} từ 'redux'; nhập thunk từ 'redux-thunk'; nhập rootReducer từ './reducers/index';

Phần mềm trung gian sẽ cho phép bạn viết một trình điều phối hành động trả về một hàm thay vì một đối tượng hành động. Câu lệnh điều kiện có thể được viết bên trong phần mềm trung gian. Mỗi phần mềm trung gian nhận được công văn của cửa hàng để chúng có thể gửi hành động mới và các hàm getState làm đối số để chúng có thể truy cập trạng thái hiện tại và trả về một hàm. Bất kỳ giá trị trả về nào từ một hàm bên trong sẽ có sẵn dưới dạng giá trị của chính hàm điều phối.

5.2. Redux – Devtools

Redux - Devtools cung cấp một nền tảng gỡ lỗi cho các ứng dụng Redux. Nó cho phép thực hiện gỡ lỗi du hành thời gian và chỉnh sửa trực tiếp. Một số tính năng trong tài liệu chính thức như sau:

- Nó cho phép bạn kiểm tra mọi trạng thái và tải trọng hành động.

- Nó cho phép bạn quay ngược thời gian bằng các hành động “hủy bỏ”.

Redux – Devtools
Redux – Devtools

Nếu bạn thay đổi mã giảm thiểu, mỗi hành động “theo giai đoạn” sẽ được đánh giá lại. Nếu bộ giảm tốc ném, chúng tôi có thể xác định lỗi và cũng như trong quá trình thực hiện hành động này đã xảy ra.

Có hai biến thể của Redux devtools như được đưa ra bên dưới:

- Redux DevTools: Nó có thể được cài đặt dưới dạng một gói và được tích hợp vào ứng dụng của bạn như được cung cấp bên dưới:

- Phần mở rộng Redux DevTools: Phần mở rộng của trình duyệt triển khai các công cụ dành cho nhà phát triển tương tự cho Redux

Bạn sẽ quen với công cụ này khi bắt đầu sử dụng. Bạn có thể gửi một hành động mà không cần viết mã thực chỉ từ công cụ plugin Redux này. Tùy chọn Dispatcher ở hàng cuối cùng sẽ giúp bạn điều này. Hãy để chúng tôi kiểm tra hành động cuối cùng mà các mục được tìm nạp thành công.

5.3. Redux – React và quá trình kiểm tra mã

Kiểm tra mã Redux rất dễ dàng vì chúng chủ yếu viết các hàm và hầu hết chúng đều thuần túy. Vì vậy, chúng tôi có thể kiểm tra nó mà không cần chế nhạo họ. Ở đây, chúng tôi đang sử dụng JEST làm công cụ thử nghiệm. Nó hoạt động trong môi trường nút và không truy cập DOM.

Redux là một khuôn khổ để quản lý trạng thái cho ứng dụng web, các thành phần React hiển thị trạng thái đó. Một kho dữ liệu duy nhất chứa trạng thái cho ứng dụng của bạn. Khi ứng dụng của bạn phát ra một hành động, xác định điều gì đó vừa xảy ra sẽ ảnh hưởng đến trạng thái. Các bộ giảm thiểu chỉ định cách thay đổi trạng thái khi hành động được nhận.

- Đạo cụ cho các thành phần React đến từ cửa hàng Redux theo dõi trạng thái.

- Các thành phần React phản ứng với đầu vào của người dùng và phát ra các hành động, trực tiếp hoặc gián tiếp.

- Redux xử lý hành động bằng cách chạy các bộ giảm thích hợp để chuyển trạng thái hiện tại thành trạng thái mới.

Tìm hiểu thêm: CV react developer

Redux – React và quá trình kiểm tra mã
Redux – React và quá trình kiểm tra mã

- Các thành phần React phản ứng với trạng thái mới và cập nhật DOM.

- Bản thân các thành phần React là không trạng thái (hầu hết thời gian), tất cả trạng thái được giữ trong cửa hàng Redux, một nơi chúng để đơn giản hóa

Như vậy, nhắc lại một lần nữa Redux là một vùng chứa trạng thái có thể dự đoán được cho các ứng dụng JavaScript. Khi ứng dụng phát triển, thật khó để giữ cho nó có tổ chức và duy trì luồng dữ liệu. Hy vọng rằng qua bài viết này bạn đã tìm cho mình câu trả lời Redux là gì? cùng những thông tin hữu ích khác cho mình.

Trọn bộ hệ thống câu hỏi phỏng vấn react native phổ biến

React native luôn được nhắc tới là một công việc hấp dẫn với yêu cầu tuyển dụng ngặt nghèo từ trình độ chuyên môn đến kỹ năng và kinh nghiệm làm việc. Trọn bộ câu hỏi tuyển dụng dưới đây sẽ hỗ trợ đắc lực bạn trong quá trình phỏng vấn ứng tuyển đó.

 

Câu hỏi phỏng vấn react native

 

Từ khóa liên quan

Chuyên mục

Bí quyết viết CV-Tâm sự Nghề nghiệp-Cẩm Nang Tìm Việc-Kỹ Năng Tuyển Dụng-Cẩm nang khởi nghiệp-Kinh nghiệm ứng tuyển việc làm-Kỹ năng ứng xử văn phòng-Quyền lợi người lao động-Bí quyết đào tạo nhân lực-Bí quyết lãnh đạo-Bí quyết làm việc hiệu quả-Bí quyết viết đơn xin nghỉ phép-Bí quyết viết thư xin thôi việc-Cách viết đơn xin việc-Bí quyết thành công trong công việc-Bí quyết tăng lương-Bí quyết tìm việc dành cho sinh viên-Kỹ năng đàm phán lương-Kỹ năng phỏng vấn-Kỹ năng quản trị doanh nghiệp-Kinh nghiệm tìm việc làm tại Hà Nội-Kinh nghiệm tìm việc làm tại Đà Nẵng-Mẹo viết hồ sơ xin việc-Mẹo viết thư xin việc-Chia sẻ kinh nghiệm ngành Kinh doanh - Bán hàng-Định hướng nghề nghiệp-Top việc làm hấp dẫn-Tư vấn nghề nghiệp lao động phổ thông-Tư vấn việc làm Hành chính văn phòng-Tư vấn việc làm ngành Báo chí-Tư vấn tìm việc làm thêm-Tư vấn việc làm ngành Bất động sản-Tư vấn việc làm ngành Công nghệ thông tin-Tư vấn việc làm ngành Du lịch-Tư vấn việc làm ngành Kế toán-Tư vấn việc làm ngành Kỹ thuật-Tư vấn việc làm ngành Sư phạm-Tư vấn việc làm ngành Luật-Tư vấn việc làm thẩm định-Tư vấn việc làm vị trí Content-Tư vấn việc làm ngành Nhà hàng - Khách sạn-Tư vấn việc làm quản lý-Kỹ năng văn phòng-Nghề truyền thống-Các vấn đề về lương-Tư vấn tìm việc làm thời vụ-Cách viết Sơ yếu lý lịch-Cách gửi hồ sơ xin việc-Biểu mẫu phục vụ công việc-Tin tức tổng hợp-Ý tưởng kinh doanh-Chia sẻ kinh nghiệm ngành Marketing-Kinh nghiệm tìm việc làm tại Bình Dương-Kinh nghiệm tìm việc làm tại Hồ Chí Minh-Mẹo viết Thư cảm ơn-Góc Công Sở-Câu chuyện nghề nghiệp-Hoạt động đoàn thể-Tư vấn việc làm Biên - Phiên dịch-Tư vấn việc làm Ngành Nhân Sự-Tư vấn việc làm Ngành Xuất Nhập Khẩu - Logistics-Tư vấn việc làm Ngành Tài Chính - Ngân Hàng-Tư vấn việc làm Ngành Xây Dựng-Tư vấn việc làm Ngành Thiết kế - Mỹ thuật-Tư vấn việc làm Ngành Vận tải - Lái xe-Quản trị nhân lực -Quản trị sản xuất-Cẩm nang kinh doanh-Tư vấn việc làm Ngành Thiết kế - Nội thất-Mô tả công việc ngành Kinh doanh-Mô tả công việc ngành Bán hàng-Mô tả công việc Tư vấn - Chăm sóc khách hàng-Mô tả công việc ngành Tài chính - Ngân hàng-Mô tả công việc ngành Kế toán - Kiểm toán-Mô tả công việc ngành Marketing - PR-Mô tả công việc ngành Nhân sự-Mô tả công việc ngành IT - Công nghệ thông tin-Mô tả công việc ngành Sản xuất-Mô tả công việc ngành Giao nhận - Vận tải-Mô tả công việc Kho vận - Vật tư-Mô tả công việc ngành Xuất nhập khẩu – Logistics-Mô tả công việc ngành Du lịch - Nhà hàng - Khách sạn-Mô tả công việc ngành Hàng không-Mô tả công việc ngành Xây dựng-Mô tả công việc ngành Y tế - Dược-Mô tả công việc Lao động phổ thông-Mô tả công việc ngành Kỹ thuật-Mô tả công việc Nhà nghiên cứu-Mô tả công việc ngành Cơ khí - Chế tạo-Mô tả công việc bộ phận Quản lý hành chính-Mô tả công việc Biên - Phiên dịch-Mô tả công việc ngành Thiết kế-Mô tả công việc ngành Báo chí - Truyền hình-Mô tả công việc ngành Nghệ thuật - Điện ảnh-Mô tả công việc ngành Spa – Làm đẹp – Thể lực-Mô tả công việc ngành Giáo dục - Đào tạo-Mô tả công việc Thực tập sinh - Intern-Mô tả công việc ngành Freelancer-Mô tả công việc Công chức - Viên chức-Mô tả công việc ngành Luật - Pháp lý-Tư vấn việc làm Chăm Sóc Khách Hàng -Tư vấn việc làm Vật Tư - Kho Vận-Hồ sơ doanh nhân-Việc làm theo phường-Danh sách các hoàng đế nổi tiếng-Tài liệu gia sư-Vĩ Nhân Thời Xưa-Chấm Công-Danh mục văn thư lưu trữ-Tài Sản Doanh Nghiệp-KPI Năng Lực-Nội Bộ Công Ty - Văn Hóa Doanh Nghiệp-Quản Lý Quan Hệ Khách Hàng-Quản Lý Công Việc Nhân Viên-Chuyển văn bản thành giọng nói-Giới Thiệu App Phiên Dịch-Quản Lý Kênh Phân Phối-Đánh giá nhân viên-Quản lý ngành xây dựng-Hóa đơn doanh nghiệp-Quản Lý Vận Tải-Kinh nghiệm Quản lý mua hàng-Danh thiếp cá nhân-Quản Lý Trường Học-Quản Lý Đầu Tư Xây Dựng-Kinh Nghiệm Quản Lý Tài Chính-Kinh nghiệm Quản lý kho hàng-Quản Lý Gara Ô Tô-Xem thêm gợi ý