Hello, world!
प्रयोगकर्ता इन्टरफेसहरू सिर्जना गर्ने जाभास्क्रिप्ट लाइब्रेरी
React ले संवादमूलक दृश्यहरु अथार्थ वेब एप्प बनाउन एकदम सजिलो पारिदिन्छ। आफ्नो एप्पको अबस्था अनुसार को दृश्यहरु बनाउनुहोस र React ले त्यसलाई चहिएकोबेला ठिक कम्पोनेंटलाई मात्र नवीनीकरण र प्रस्तुत गर्नेछ जतिबेला हजुर को एप्पको कुनै डाटा परिबर्तन हुनछ।
घोषणात्मक दृश्यहरुले तपाइको कोड अजै बुझिने, संकेत्माक, पूर्वानुमान गर्न सकिने बनाउछ र साथ् साथै केहि समस्या आए पनि समाधान (Debug) गर्न तेती गारो हुदेन।
इनकैप्सुलेटेड कम्पोनेंट बनाउनुहोस जसले आफ्नो अवस्था (state) आफै बेबस्थित गर्छ र त्यसपछि त्यसलाइ मिलाएर जटिल दृश्यहरु बनाउनुहोस।
प्राय जसो हामीले कम्पोनेंटमा तार्किक सोचहरु जावास्क्रिप्टमा लेख्छौ ना कि टेम्प्लेटमा जसकारण हामीले आबस्यक डेटा पठाउन सक्छौ र कम्पोनेंटको अवस्थालाई DOM बाट टाडा राख्छौ।
तपाइले कुन अरु प्रबिधि प्रयोग गर्नु भएको छ त्यसमा हाम्रो कुनै धारणा छैन जसकारण तपाइले तेही प्रबिधि माथि वा ंगसंगै React मा एप्प बनाउन सक्नुन्छ।
React तपाइले सर्भरमा Node को सहायताले पनि प्रयोग गर्न सक्नुन्छ वा React Native को सहायताले मोबाइल एप्प पनि बनाउन सक्नुनछ।
React कम्पोनेंटहरुले render()
मेथड प्रयोग गर्छन जसले डाटाहरु लिग्छ र दृश्य फिर्ता दिन्छ। दिएको उधाहरणमा तपाइले देख्न् सक्नुन्छ, तेय्हा XML जस्तो ेखिने भाषा प्रयोग भयेको छ जसलाई हामी JSX भन्छौ र बाहिर बाट आएको डाटा येदि render()
मेथडमा आब्सयेक भएमा this.props
भित्र हुनेछ जसलाइ हामि प्रोप्स भन्छौ।
React एप्प बनाउदा JSX जरुरि हुदैन। JSX मात्र हामीलाई लेख्न सजिलो होस् भनेर गराएको हो। JSX अन्त्यमा परिबर्तन भएर साधारण जावास्क्रिप्टनै हुनेछ। तपाइले Babel REPL मा गएर पनि हेर्न सक्नुन्छ।
class HelloMessage extends React.Component {
render() {
return (
<div>
Hello {this.props.name}
</div>
);
}
}
ReactDOM.render(
<HelloMessage name="Taylor" />,
document.getElementById('hello-example')
);
एउटा कम्पोनेंटले बाहिरबाट आउने डाटा (this.props
) मात्र नभई आफैले पनि डाटा राख्न सक्छ जसलाई हामीले स्टेटफुल कम्पोनेंट पनि भन्छौ।
आफ्नो निजि डाटा राख्न this.state
प्रयोग हुन्छ जसलाई हामीले स्टेट भन्छौ र जब कम्पोनेंट को आफ्नो निजि स्टेट परिबर्तन हुन्छ React ले आब्सयेक HTML मात्र परिबर्तन गरिदिन्छ।
class Timer extends React.Component {
constructor(props) {
super(props);
this.state = { seconds: 0 };
}
tick() {
this.setState(state => ({
seconds: state.seconds + 1
}));
}
componentDidMount() {
this.interval = setInterval(() => this.tick(), 1000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
return (
<div>
Seconds: {this.state.seconds}
</div>
);
}
}
ReactDOM.render(
<Timer />,
document.getElementById('timer-example')
);
props
र state
प्रयोग गरेर हामीले एउटा साधारण टुडु एप्प बनाउन सक्छौ। दिएको उदहारणमा एप्पले state
प्रयोग गरेर सुचीमा बस्तुहरु थप्ने, घटाउने वा अपडेट गर्छ र युजरले लेखेको डाटालाइ पनि स्टेटमा राख्छ। हेर्दा events
हरु छुट्टा छुट्टै प्रयोग भएको देखिन्छ तर React ले event
हरुलाई जम्मा गर्छ र एकमुस्ट ह्यान्डल गर्छ जसलाई हामि event delegation
पनि भन्छौ।
class TodoApp extends React.Component {
constructor(props) {
super(props);
this.state = { items: [], text: '' };
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
render() {
return (
<div>
<h3>TODO</h3>
<TodoList items={this.state.items} />
<form onSubmit={this.handleSubmit}>
<label htmlFor="new-todo">
What needs to be done?
</label>
<input
id="new-todo"
onChange={this.handleChange}
value={this.state.text}
/>
<button>
Add #{this.state.items.length + 1}
</button>
</form>
</div>
);
}
handleChange(e) {
this.setState({ text: e.target.value });
}
handleSubmit(e) {
e.preventDefault();
if (this.state.text.length === 0) {
return;
}
const newItem = {
text: this.state.text,
id: Date.now()
};
this.setState(state => ({
items: state.items.concat(newItem),
text: ''
}));
}
}
class TodoList extends React.Component {
render() {
return (
<ul>
{this.props.items.map(item => (
<li key={item.id}>{item.text}</li>
))}
</ul>
);
}
}
ReactDOM.render(
<TodoApp />,
document.getElementById('todos-example')
);
React कुनै पनि बाहिरि लाइब्रेरी वा फेरेम्वोर्क संग काम गर्न सक्छ। दिएको उदहारणमा हेर्नु भयो भने तेस्मा हामीले remarkable भन्ने बाहिरि लाइब्रेरी प्रयोग गरेकोछौ जसले <textarea>
को डाटालाई रियल टाईममा परिबर्तन गरिदिन्छ।
class MarkdownEditor extends React.Component {
constructor(props) {
super(props);
this.md = new Remarkable();
this.handleChange = this.handleChange.bind(this);
this.state = { value: 'Hello, **world**!' };
}
handleChange(e) {
this.setState({ value: e.target.value });
}
getRawMarkup() {
return { __html: this.md.render(this.state.value) };
}
render() {
return (
<div className="MarkdownEditor">
<h3>Input</h3>
<label htmlFor="markdown-content">
Enter some markdown
</label>
<textarea
id="markdown-content"
onChange={this.handleChange}
defaultValue={this.state.value}
/>
<h3>Output</h3>
<div
className="content"
dangerouslySetInnerHTML={this.getRawMarkup()}
/>
</div>
);
}
}
ReactDOM.render(
<MarkdownEditor />,
document.getElementById('markdown-example')
);
Hello, world!