Nếu tệp template.html
chỉ là HTML chứ không phải thành phần React, bạn không thể yêu cầu nó giống như cách bạn làm với tệp JS.
Tuy nhiên, nếu bạn đang sử dụng Browserify - có một biến đổi được gọi là stringify sẽ cho phép bạn yêu cầu tệp không phải là js dưới dạng chuỗi. Khi bạn đã thêm biến đổi, bạn sẽ có thể yêu cầu tệp HTML và chúng sẽ xuất như thể chúng chỉ là chuỗi.
Khi bạn đã yêu cầu tệp HTML, bạn sẽ phải tiêm chuỗi HTML vào thành phần của mình, sử dụng dangerouslySetInnerHTML
prop.
var __html = require('./template.html');
var template = { __html: __html };
React.module.exports = React.createClass({
render: function() {
return(
<div dangerouslySetInnerHTML={template} />
);
}
});
Điều này đi ngược lại với những gì React nói đến. Sẽ là tự nhiên hơn khi tạo các mẫu của bạn dưới dạng các thành phần React với JSX, chứ không phải là các tệp HTML thông thường.
Cú pháp JSX giúp dễ dàng thể hiện dữ liệu có cấu trúc, như HTML, đặc biệt khi bạn sử dụng stateless function components.
Nếu tập tin template.html
bạn nhìn một cái gì đó như thế này
<div class='foo'>
<h1>Hello</h1>
<p>Some paragraph text</p>
<button>Click</button>
</div>
Sau đó, bạn có thể chuyển đổi nó thay vì vào một tập tin JSX trông như thế này.
module.exports = function(props) {
return (
<div className='foo'>
<h1>Hello</h1>
<p>Some paragraph text</p>
<button>Click</button>
</div>
);
};
Sau đó, bạn có thể yêu cầu và sử dụng nó mà không cần phải xâu chuỗi.
var Template = require('./template');
module.exports = React.createClass({
render: function() {
var bar = 'baz';
return(
<Template foo={bar}/>
);
}
});
Nó duy trì tất cả cấu trúc của tệp gốc và cho phép kiểm tra cú pháp thời gian biên dịch, không giống như tệp HTML thông thường.
Bạn phải sử dụng chữ hoa cho các thành phần tùy chỉnh, vì vậy hãy đổi tên 'mẫu' thành' Mẫu' và sau đó trả về '' – Icepickle
Tôi giả sử rằng khi bạn nói "HTML", bạn thực sự có nghĩa là JSX? –
@Icepickle tôi nhận được lỗi này: Lỗi bắt buộc: Không thể tìm thấy mô-đun "./template" –