Я хочу обновить компонент React из внешнего базового кода javascript. Я понял, что единственный способ сделать это - использовать props вместо состояний. Я попытался последовать примеру, приведенному в старом ответе (https://stackoverflow.com/a/26035935/10469201), но не могу заставить его работать. Кроме того, является ли плохой практикой частое обновление компонента таким образом? Или есть другой способ?
РЕДАКТИРОВАТЬ : Код, который я пробовал:
index.html:
<div id = "root"></div>
<button id='changeprop'>change name</button>
index.js:
ReactDOM.render(
<App name = "default name"/>,
document.getElementById('root')
);
App.js:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
const $ = window.$;
export default class App extends Component {
constructor(props) {
super(props);
this.name = props.name;
}
render() {
return (
<div>
name : {this.name}
</div>
);
}
}
var Wrapper = function(name, el) {
var newName = name;
function update() {
return ReactDOM.render(<App name = {newName}/>, el)
}
return {
update: update
}
}
var newName = "new name";
var wrapper = Wrapper(newName, document.getElementById('root'));
$('#changeprop').on('click', function(){ wrapper.update(); });
При нажатии кнопки я повторно визуализирую компонент, но отображаемое имя по-прежнему является «именем по умолчанию», когда я хочу, чтобы отображалось «новое имя».
Пожалуйста, прочтите Как спросить и минимальный воспроизводимый пример.
Импортируйте код js, выберите жизненный цикл и реквизиты и попробуйте обновить его. Подробный жизненный цикл и примеры здесь responsejs.org/docs/react-component.html



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать метод forceUpdate с вашим экземпляром компонента, хотя использовать его не рекомендуется.
Вы также можете определить компонент с отслеживанием состояния и использовать метод компонента setState для повторного рендеринга вашего компонента с другими данными.
Действительно, forceUpdate работает, и в вашем примере состояние компонента изменяется из внешнего кода, но это потому, что метод render () его меняет. Я попытался передать реквизит в componentInstance, но безуспешно. Есть ли способ передать параметр методу рендеринга?
Я обновил свой пример, так как props доступны только для чтения, вам нужно использовать setState, если вы хотите изменить данные извне
Спасибо, ваш обновленный пример помогает! Я не знал, что вы можете использовать setState таким образом
Пожалуйста, поделитесь соответствующим кодом, который вы пробовали, но не работает