React Π±Π΅Π· ES6
These docs are old and wonβt be updated. Go to react.dev for the new React docs.
ΠΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ React ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ JavaScript-ΠΊΠ»Π°ΡΡ:
class Greeting extends React.Component {
render() {
return <h1>ΠΡΠΈΠ²Π΅Ρ, {this.props.name}</h1>;
}
}
ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ES6, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ create-react-class
:
var createReactClass = require('create-react-class');
var Greeting = createReactClass({
render: function() {
return <h1>ΠΡΠΈΠ²Π΅Ρ, {this.props.name}</h1>;
}
});
API ES6-ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΠΎΡ
ΠΎΠΆ Π½Π° createReactClass()
Π·Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΏΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ES6 defaultProps
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
class Greeting extends React.Component {
// ...
}
Greeting.defaultProps = {
name: 'ΠΠ°ΡΠΈΠ»ΠΈΡΠ°'
};
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ createReactClass()
Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ getDefaultProps()
Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅:
var Greeting = createReactClass({
getDefaultProps: function() {
return {
name: 'ΠΠ°ΡΠΈΠ»ΠΈΡΠ°'
};
},
// ...
});
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
Π ES6-ΠΊΠ»Π°ΡΡΠ°Ρ
Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· this.state
Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅:
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: props.initialCount};
}
// ...
}
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ createReactClass()
Π²Π°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ getInitialState
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅:
var Counter = createReactClass({
getInitialState: function() {
return {count: this.props.initialCount};
},
// ...
});
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ°
Π ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
React, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ
ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΡ ES6, ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ»Π΅Π΄ΡΡΡ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ΅, ΡΡΠΎ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ES6. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ this
Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ. ΠΠ°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ .bind(this)
Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅:
class SayHello extends React.Component {
constructor(props) {
super(props);
this.state = {message: 'ΠΡΠΈΠ²Π΅Ρ!'};
// ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π²Π°ΠΆΠ½Π°!
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
alert(this.state.message);
}
render() {
// ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ `this.handleClick` ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ²ΡΠ·Π°Π½
return (
<button onClick={this.handleClick}>
ΠΠΎΠ·Π΄ΠΎΡΠΎΠ²Π°ΡΡΡΡ
</button>
);
}
}
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ createReactClass()
, ΡΠΎ ΡΡΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±ΡΠ΄ΡΡ ΡΠ²ΡΠ·Π°Π½Ρ:
var SayHello = createReactClass({
getInitialState: function() {
return {message: 'ΠΡΠΈΠ²Π΅Ρ!'};
},
handleClick: function() {
alert(this.state.message);
},
render: function() {
return (
<button onClick={this.handleClick}>
ΠΠΎΠ·Π΄ΠΎΡΠΎΠ²Π°ΡΡΡΡ
</button>
);
}
});
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ES6-ΠΊΠ»Π°ΡΡΡ ΠΏΠΈΡΡΡΡΡ Ρ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ, Π·Π°ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ.
ΠΡΠ»ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²Π°Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π΅ΠΏΡΠΈΠ³Π»ΡΠ΄Π½ΡΠΉ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ· ES2022 syntax:
class SayHello extends React.Component {
constructor(props) {
super(props);
this.state = {message: 'ΠΡΠΈΠ²Π΅Ρ!'};
}
// ΠΠ΄Π΅ΡΡ ΡΡΡΠ΅Π»ΠΎΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ:
handleClick = () => {
alert(this.state.message);
};
render() {
return (
<button onClick={this.handleClick}>
ΠΠΎΠ·Π΄ΠΎΡΠΎΠ²Π°ΡΡΡΡ
</button>
);
}
}
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
- ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅.
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΡΠ΅Π»ΠΎΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
onClick={(e) => this.handleClick(e)}
. - ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
createReactClass
;
ΠΡΠΈΠΌΠ΅ΡΠΈ
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
ES6 Π·Π°ΠΏΡΡΠ΅Π½ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ΠΉ. ΠΠΎΡΡΠΎΠΌΡ React Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ES6.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ Π½Π°ΡΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Π°Ρ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, ΠΈ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΠΊΠΎΠ΄Π΅.
ΠΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΏΡΠ°Π²ΠΊΠΈ.
ΠΠ½ΠΎΠ³Π΄Π° ΠΎΡΠ΅Π½Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΊΠ²ΠΎΠ·Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ. createReactClass
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ mixins
.
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ setInterval()
, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΡΡΠΎΠ±Ρ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ. React ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ·Π½Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΈΠ»ΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ setInterval()
ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠΈΡΠ°Π΅Ρ ΠΌΡΡΠΎΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ.
var SetIntervalMixin = {
componentWillMount: function() {
this.intervals = [];
},
setInterval: function() {
this.intervals.push(setInterval.apply(null, arguments));
},
componentWillUnmount: function() {
this.intervals.forEach(clearInterval);
}
};
var createReactClass = require('create-react-class');
var TickTock = createReactClass({
mixins: [SetIntervalMixin], // ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ
getInitialState: function() {
return {seconds: 0};
},
componentDidMount: function() {
this.setInterval(this.tick, 1000); // ΠΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈ
},
tick: function() {
this.setState({seconds: this.state.seconds + 1});
},
render: function() {
return (
<p>
React Π±ΡΠ» Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π·Π° {this.state.seconds} ΡΠ΅ΠΊΡΠ½Π΄.
</p>
);
}
});
const root = ReactDOM.createRoot(document.getElementById('example'));
root.render(<TickTock />);
ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ΠΉ ΠΈ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° (Ρ.Π΅. Ρ ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠΈΡΡΠΊΡ ΠΏΡΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°), Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π±ΡΠ΄ΡΡ Π²ΡΠ·Π²Π°Π½Ρ. ΠΠ΅ΡΠΎΠ΄Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΡΡ , Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.