Tôi khá mới đối với React JS và tôi có giao diện người dùng đơn giản này mà tôi cần để tạo. Về cơ bản tôi có một danh sách các loại và nếu tôi nhấp vào một danh mục, một danh sách các mục sẽ hiển thị trong danh mục đó. Nó sẽ ẩn danh sách các mục nếu tôi nhấp vào một danh mục khác.Cách hiển thị danh sách các mục khác nhau khi nhấp vào một danh mục
Tôi đã được cung cấp hai API, một API chứa JSON của các danh mục và một chứa các mục.
Tôi đã quản lý để tìm nạp dữ liệu từ API và nhổ chúng ra trên DOM. Tuy nhiên, tôi thấy khó để ghép thành phần lại với nhau để chỉ hiển thị các mục phù hợp khi danh mục của nó đã được nhấp.
Tôi đang sử dụng Babel để chuyển cú pháp JSX của tôi và sử dụng các trục để tìm nạp Dữ liệu. Tại thời điểm trang của tôi chỉ phun ra tất cả các mục và tất cả các loại. Hiểu được nhà nước rất khó cho tôi.
Bất kỳ lời khuyên nào cho người mới sử dụng Reactjs leaner? Cảm ơn!
Hai API của tôi có thể được tìm thấy trong mã của tôi vì tôi không có đủ điểm đại diện để đăng liên kết.
My JSX:
var React = require('react');
var ReactDOM = require('react-dom');
var axios = require('axios');
var NavContainer = React.createClass({
getInitialState: function() {
return {
category: [],
items: []
}
},
// WHAT IS CURRENTLY SELECTED
handleChange(e){
this.setState({data: e.target.firstChild.data});
},
componentDidMount: function() {
// FETCHES DATA FROM APIS
var th = this;
this.serverRequest =
axios.all([
axios.get('https://api.gousto.co.uk/products/v2.0/categories'),
axios.get('https://api.gousto.co.uk/products/v2.0/products?includes[]=categories&includes[]=attributes&sort=position&image_sizes[]=365&image_sizes[]=400&period_id=120')
])
.then(axios.spread(function (categoriesResponse, itemsResponse) {
//... but this callback will be executed only when both requests are complete.
console.log('Categories', categoriesResponse.data.data);
console.log('Item', itemsResponse.data.data);
th.setState({
category: categoriesResponse.data.data,
items : itemsResponse.data.data,
});
}));
},
componentWillUnmount: function() {
this.serverRequest.abort();
},
render: function() {
return (
<div className="navigation">
<h1>Store Cupboard</h1>
<NavigationCategoryList data={this.state.category} handleChange={this.handleChange}/>
<NavigationSubCategoryList data={this.state.category} subData={this.state.items} selected_category={this.state.data} />
</div>
)
}
});
var NavigationCategoryList = React.createClass({
render: function() {
var handleChange = this.props.handleChange;
// LOOPS THE CATEGORIES AND OUTPUTS IT
var links = this.props.data.map(function(category) {
return (
<NavigationCategory title={category.title} link={category.id} handleChange={handleChange}/>
);
});
return (
<div>
<div className="navigationCategory">
{links}
</div>
</div>
);
}
});
var NavigationSubCategoryList = React.createClass({
render: function() {
var selected = this.props.selected_category;
var sub = this.props.subData.map(function(subcategory) {
if(subcategory.categories.title === selected)
return (
<NavigationSubCategoryLinks name={subcategory.title} link={subcategory.link} />
);
});
return (
<div className="subCategoryContainer">
{sub}
</div>
);
}
});
var NavigationSubCategoryLinks = React.createClass({
render: function() {
return (
<div className="navigationSubCategory" id={this.props.name}>
{this.props.name}
</div>
);
}
});
var NavigationCategory = React.createClass({
render: function() {
var handleChange = this.props.handleChange;
return (
<div className="navigationLink">
<a href={this.props.link} onClick={handleChange}>{this.props.title}</a>
</div>
);
}
});
ReactDOM.render(<NavContainer />, document.getElementById("app"));
Đây là một ảnh chụp màn hình của những gì tôi có trên trang web của tôi cho đến nay. Tất cả mọi thứ chỉ đổ trên màn hình. Các liên kết màu xanh lam là các danh mục.
Screenshot of current web page
Bạn đã bao giờ tìm ra? – montrealist
Tôi sẽ cố gắng viết ra một câu trả lời cụ thể cho câu hỏi của bạn sau này nhưng hãy kiểm tra jsbin này thể hiện một cái gì đó tương tự như những gì bạn đang cố gắng làm. Ghi chú 'items.filter (...)' vào giữa chừng. Đây là chìa khóa để lọc qua một tập hợp các kết quả và chỉ chọn ra các kết quả cụ thể. Bạn sẽ cần phải viết một hàm kiểm tra 'id' của mỗi mục và so sánh nó với' selectedCategoryId' và chỉ chọn ra những hàm phù hợp. http://jsbin.com/yotucu/1/embed?html,js,output – jaybee
Cảm ơn bạn @ dannyid; bất kỳ suy nghĩ nào về cách thực hành tốt nhất Cách phản ứng để tổ chức mã dựa trên tập hợp các loại và mục hiện có (mối quan hệ nhiều-nhiều) đến từ máy chủ? – montrealist