Доступ к this.props в реагирует ComponentDidMount
Я новичок, чтобы реагировать, и я застрял на определенном проекте. Дело в том, что у меня есть api_url
в this.props
, полученный от родительского компонента. И в этом дочернем компоненте я хочу использовать api_url
для получения некоторых данных с использованием JSON.
В родительском компоненте у меня есть:
Repositories api_url={this.state.objs.repos_url}
и в дочернем компоненте я хочу что-то вроде:
componentDidMount() {
$.getJSON(this.props.api_url, function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
});
}
так что мне нужен соответствующий api_url
в разделе URL $.getJSON
.
Есть ли способ получить доступ к this.props
в componentDidMount
или есть какой-то другой способ достижения тех же результатов?
Еще одна вещь, связанная с этим, заключается в том, что я также использую вызов $.getJSON
в ComponentDidMount
родительского компонента.
Спасибо заранее.
Ответы
Ответ 1
В вашем классе реализуйте конструктор:
constructor(props){
super(props);
this.state = {
//states
};
}
componentDidMount(){
//Get this.props
console.log(this.props.nameOfProp);
};
Вероятно, в этой реакционной версии легче получить его.
Ответ 2
Чтобы получить доступ к реквизитам в дочернем компоненте, вам нужно создать конструктор в дочернем компоненте, а затем передать реквизит в качестве атрибута функции super() как
constructor(props) {
super(props);
this.state = {}
}
componentDidMount(){
$.getJSON(this.props.api_url , function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
});
}
После этого вы можете получить доступ к реквизитам всего вашего дочернего компонента
Ответ 3
Вероятно, у вас есть проблема с this
внутри вашего вызова ajax. Я предполагаю, что вам нужно привязать this
в своих репозиториях, чтобы экземпляр this
в вашем вызове ajax ссылался на репозитории, а не на объект ajax.
Ответ 4
Для тех, кто сейчас наткнулся на эту страницу, то, что отсутствует выше, .bind(this)
после $.getJSON
. В противном случае вы не сможете получить доступ к this
в пределах $.getJSON
.
componentDidMount() {
$.getJSON(this.props.api_url, function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
}).bind(this);
}
Ответ 5
Вы пытались добавить this.componentDidMount = this.componentDidMount.bind(this);
к своему конструктору? Таким образом вы можете достичь this
от componentDidMount
.