ការណែនាំស្តីអំពី JSX
ពិចារណាអំពីការប្រកាសអថេរ(variable):
const element = <h1>Hello, world!</h1>;
វាដូចជាកំប្លែងដែលវាក្យសម្ពន្ធ(Syntax)មិនមែនជា String ឬ HTML។
វាត្រូវបានគេហៅថា JSX ហើយវាជាការបន្ថែមវាក្យសម្ព័ន្ធ(Syntax)ទៅក្នុង JavaScript ។ យើងសូមផ្តល់អនុសាសន៍ប្រើវាជាមួយ React ដើម្បីពណ៌នាអំពីអ្វីដែល UI គួរតែមាន។ JSX អាចរំលឹកអ្នកពីភាសាគំរូមួយប៉ុន្តែវាមកជាមួយភាពថាមពលពេញនៃ JavaScript ។
ប្រើ JSX ដើម្បីបង្កើតធាតុ React ។ យើងនឹងធ្វើការបង្ហាញពួកវាទៅ DOM នៅក្នុង ផ្នែកបន្ទាប់។ ផ្នែកខាងក្រោមនេះអ្នកអាចរកឃើញមូលដ្ឋានគ្រឹះនៃ JSX ដែលចាំបាច់ដើម្បីអាចឱ្យអ្នកចាប់ផ្តើម។
ហេតុអ្វី JSX?
React បានបញ្ចូលនូវផ្នែកគណនានៃការបង្ហាញត្រូវបានផ្សំជាមួយនឹងតក្កវិជ្ជា UI ផ្សេងទៀត: របៀបដែលព្រឹត្តិការណ៍ត្រូវបានដោះស្រាយ របៀបដែល State ផ្លាស់ប្តូរតាមពេលវេលា និង របៀបដែលទិន្នន័យត្រូវបានរៀបចំសម្រាប់ការបង្ហាញ។
ជំនួសឱ្យការបំបែកសិប្បនិម្មិត បច្ចេកវិទ្យា ដោយដាក់ការសម្គាល់និងតក្កឬការគណនានៅក្នុងឯកសារដាច់ដោយឡែក React បំបែក ការព្រួយបារម្ភ ជាមួយនឹងឯកតាគូរលុងដែលហៅថា “components” ដែលមានទាំងពីរ. យើងនឹងត្រលប់ទៅ components វិញផ្នែកបន្ថែមទៀត ប៉ុន្តែប្រសិនបើអ្នកមិនទាន់មានយល់ច្បាស់អំពីការដាក់ការសម្គាល់នៅក្នុង JS ការពិភាក្សានេះ ដែលអាចធ្វើអោយអ្នកឆាប់យល់បានកាន់តែច្បាស់។
React មិនត្រូវការ ប្រើប្រាស់ JSX ប៉ុន្តែមនុស្សភាគច្រើនយល់ឃើញថាវាមានប្រយោជន៍ជាជំនួយនៅពេលធ្វើការជាមួយ UI នៅក្នុងកូដ JavaScript។ វាក៏អនុញ្ញាតឱ្យ React ដើម្បីបង្ហាញពីកំហុសនិងសារព្រមានដែលមានប្រយោជន៍ជាងមុន។
ជាមួយនឹងការណែនាំខាងលើនោះ ចូរយើងចាប់ផ្ដើម!
ការបង្កប់កន្សោមនៅក្នុង JSX
នៅក្នុងឧទាហរណ៍ខាងក្រោម យើងប្រកាសអថេរ(variable)ហៅថា name
ហើយបន្ទាប់មកប្រើវានៅខាងក្នុង JSX ដោយរុំវាក្នុងដង្កៀបអង្កាញ់(curly braces):
const name = 'Josh Perez';const element = <h1>Hello, {name}</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);
អ្នកអាចដាក់ កន្សោម JavaScript ដែលត្រឺមត្រូវទាំងអស់ នៅខាងក្នុងដង្កៀបអង្កាញ់(curly braces) JSX. ឧទាហរណ៍, 2 + 2
, user.firstName
, or formatName(user)
ជាកន្សោម JavaScript ត្រឹមត្រូវទាំងអស់។
នៅក្នុងឧទាហរណ៍ខាងក្រោមយើងបានបង្កប់នូវលទ្ធផលនៃការហៅមុខងារ JavaScript formatName(user)
, ចូលទៅក្នុង <h1>
ធាតុ.
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Harper',
lastName: 'Perez'
};
const element = (
<h1>
Hello, {formatName(user)}! </h1>
);
ReactDOM.render(
element,
document.getElementById('root')
);
យើងធ្វើការបំបែក JSX នៅលើបន្ទាត់ជាច្រើនដើម្បីឲមានភាពងាយស្រួលសម្រាប់ការអាន។ ខណៈពេលដែលវាមិនត្រូវបានទាមទារ នៅពេលធ្វើដូចនេះ យើងក៏សូមផ្តល់អនុសាសន៍រុំវានៅក្នុងវង់ក្រចកដើម្បីជៀសវាងពីចំនុចគ្រោះថ្នាក់នៃ បញ្ចូល semicolon ស្វ័យប្រវត្តិ.
JSX ក៏ជាកន្សោមផងដែរ
បន្ទាប់ពីការចងក្រងកន្សោម JSX ក្លាយជាការហៅមុខងារ JavaScript ធម្មតានិងវាយតម្លៃទៅជាវត្ថុ JavaScript ។
នេះគឺមានន័យថា អ្នកអាចប្រើប្រាស់ JSX នៅខាងក្នុង ប្រយោគ if
និង for
loops ការប្រកាសអថេរ ការទទួលនូវតម្លៃ និងការទទួលពីមុខងារណាមួយ
function getGreeting(user) {
if (user) {
return <h1>Hello, {formatName(user)}!</h1>; }
return <h1>Hello, Stranger.</h1>;}
ការបញ្ជាក់លក្ខណៈជាមួយ JSX
អ្នកអាចប្រើ quotes ដើម្បីបញ្ជាក់ string ជាគុណលក្ខណៈ:
const element = <div tabIndex="0"></div>;
អ្នកក៏អាចប្រើដង្កៀបអង្កាញ់({})ដើម្បីបង្កប់កន្សោម JavaScript នៅក្នុងគុណលក្ខណៈ:
const element = <img src={user.avatarUrl}></img>;
កុំដាក់សញ្ញាសម្រង់(quotes)ជុំវិញដង្កៀបអង្កាញ់({})នៅពេលបង្កប់កន្សោម JavaScript នៅក្នុងគុណលក្ខណៈ។ អ្នកគួរប្រើសម្រង់ (សម្រាប់តម្លៃ string) ឬដង្កៀបអង្កាញ់ (សម្រាប់កន្សោម) ប៉ុន្តែមិនមែនទាំងពីរនៅក្នុងគុណលក្ខណៈ(attribute)ដូចគ្នា។
សារព្រមាន:
ចាប់តាំងពី JSX ខិតទៅជិត JavaScript ជាង HTML, React DOM ប្រើ
camelCase
អនុសញ្ញាការដាក់ឈ្មោះទ្រព្យសម្បត្តិ(property)ជំនួសឱ្យឈ្មោះគុណលក្ខណៈ (attribute)HTML ។ឧទាហរណ៍,
class
ក្លាយជាclassName
ក្នុង JSX, និងtabindex
ក្លាយជាtabIndex
.
ការបញ្ជាក់ Children ជាមួយ JSX
ប្រសិនបើស្លាក (Tag) ទទេ អ្នកអាចបិទវាភ្លាមៗជាមួយ />
ដូចជា XML:
const element = <img src={user.avatarUrl} />;
ស្លាក JSX អាចមាន children:
const element = (
<div>
<h1>Hello!</h1>
<h2>Good to see you here.</h2>
</div>
);
JSX បង្ការការវាយប្រហារ
វាគឺមានសុវត្ថិភាពក្នុងការបង្កប់នូវទិន្ន័យរបស់អ្នកប្រើប្រាស់ដែលបានបញ្ចូលទៅក្នុង JSX:
const title = response.potentiallyMaliciousInput;
// This is safe:
const element = <h1>{title}</h1>;
តាមលំនាំដើម, React DOM escapes តម្លៃដែលបានបង្កប់នៅក្នុង JSX មុនពេលបង្ហាញវា។ ដូច្នេះវាធានាថាអ្នកមិនអាចបញ្ចូលបអ្វីដែលត្រូវបានសរសេរមិនជាក់លាក់នៅក្នុងកម្មវិធីរបស់អ្នកទេ។ អ្វីគ្រប់យ៉ាងត្រូវបានបម្លែងទៅជា String មុនពេលត្រូវបានបង្ហាញ។ វាជួយការពារការវាយប្រហារ XSS (cross-site-scripting)។
JSX វត្ថុតំណាង
Babel ធ្វើការបំលែង JSX នៅពេល React.createElement()
ត្រូវបានហៅ។
ឧទាហរណ៍ទាំងពីរនេះគឺដូចគ្នា:
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
React.createElement()
ធ្វើការត្រួតពិនិត្យមួយចំនួនដើម្បីជួយអ្នកសរសេរកូដដោយមិនចាំបាច់មានកំហុសប៉ុន្តែសំខាន់វាបង្កើតវត្ថុដូចនេះ:
// Note: this structure is simplified
const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, world!'
}
};
វត្ថុ(Object)ទាំងនេះត្រូវបានគេហៅថា “React elements” ។ អ្នកអាចគិតថាពួកគេជាការពិពណ៌នាអំពីអ្វីដែលអ្នកចង់ឃើញនៅលើអេក្រង់។ React បានអានវត្ថុ(Object)ទាំងនេះហើយប្រើពួកវាដើម្បីបង្កើត DOM និងរក្សាវាឱ្យទាន់សម័យ(up to date)។
យើងនឹងធ្វើការស្វែងយល់ React element ក្នុងការឆ្លើយតបទៅ DOM នៅក្នុង ផ្នែកបន្ទាប់។
ព័ត៌មានជំនួយ:
យើងសូមណែនាំឱ្យប្រើ “Babel” និយមន័យភាសា សម្រាប់កម្មវិធីកែសម្រួល(Text Editor) របស់អ្នក ដូច្នេះកូដ ES6 និង JSX ត្រូវបានបន្លិចឱ្យបានត្រឹមត្រូវ។