我看到这两种用法可以互换。
两者的主要用例是什么?有什么优点/缺点吗?一种做法更好吗?
我看到这两种用法可以互换。
两者的主要用例是什么?有什么优点/缺点吗?一种做法更好吗?
当前回答
最大的区别是从它们的来源开始,所以constructor是JavaScript中类的构造函数,另一方面,getInitialState是React生命周期的一部分。构造函数方法是用于创建和初始化用类创建的对象的特殊方法。
其他回答
最大的区别是从它们的来源开始,所以constructor是JavaScript中类的构造函数,另一方面,getInitialState是React生命周期的一部分。构造函数方法是用于创建和初始化用类创建的对象的特殊方法。
现在我们不需要在组件内部调用构造函数——我们可以直接调用state={something:""},否则之前我们必须先用super()声明构造函数来继承React中的所有东西。组件类 然后在构造函数中初始化状态。
如果使用React。createClass然后用getInitialState方法定义初始化状态。
在构造函数中,我们应该总是初始化状态。
如果有人还在寻找答案,那么这个链接将是有帮助的 链接
React中的构造函数和getInitialState都用于 初始化状态,但它们不能互换使用。 我们在React中使用getInitialState。使用createClass和constructor React.Component。
构造函数是设置组件初始状态的理想位置。您需要直接分配初始状态,而不是在其他方法中使用setState()。
class Hello extends React.Component {
constructor(props) {
super(props);
this.setState({
title: 'This is the first test'
});
}
render() {
return <div>{this.state.title} </div>
}
}
ReactDOM.render(<Hello />, document.getElementById('container'));
ES5和ES6之间主要的根本区别在于新的 类关键字。类型的定义并不方便 React组件作为类,然而ES确实提供了方便 将react组件定义为类。 更简单的是getInitialState是ES5友好的方法 定义React组件的初始状态。我们使用getInitialState 与反应。React使用createClass和constructor。组件
例子:
class Goodmorning extends React.Component {
render() {
return <span>Good Morning</span>;
}
}
It would rely on helper module called create-react-class:
var createGoodmorningReactClass = require('create-react-class');
var Goodmorning = createReactClass({
render: function() {
return <span>Good Morning</span>;
}
});
The object passed into create-react-class that is defined in initial stage by calling the getInitialState attribute:
var Goodmorning = createReactClass({
getInitialState: function() {
return {name: this.props.name};
},
render: function() {
return <span>Good {this.state.name}</span>;
}
});
In ES6 implementation:
class Goodmorning extends React.Component {
constructor(props) {
super(props);
this.state = {
name: props.name
}
}
render() {
return <span>Good {this.state.name}</span>;
}
}
如果有人还在寻找答案,请阅读这篇文章。 链接
如果您正在使用ES6编写React-Native类,将遵循以下格式。它包括RN的生命周期方法,用于类进行网络调用。
import React, {Component} from 'react';
import {
AppRegistry, StyleSheet, View, Text, Image
ToastAndroid
} from 'react-native';
import * as Progress from 'react-native-progress';
export default class RNClass extends Component{
constructor(props){
super(props);
this.state= {
uri: this.props.uri,
loading:false
}
}
renderLoadingView(){
return(
<View style={{justifyContent:'center',alignItems:'center',flex:1}}>
<Progress.Circle size={30} indeterminate={true} />
<Text>
Loading Data...
</Text>
</View>
);
}
renderLoadedView(){
return(
<View>
</View>
);
}
fetchData(){
fetch(this.state.uri)
.then((response) => response.json())
.then((result)=>{
})
.done();
this.setState({
loading:true
});
this.renderLoadedView();
}
componentDidMount(){
this.fetchData();
}
render(){
if(!this.state.loading){
return(
this.renderLoadingView()
);
}
else{
return(
this.renderLoadedView()
);
}
}
}
var style = StyleSheet.create({
});