Обновите компонент React с помощью javascript

Я хочу обновить компонент 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(); });

При нажатии кнопки я повторно визуализирую компонент, но отображаемое имя по-прежнему является «именем по умолчанию», когда я хочу, чтобы отображалось «новое имя».

Пожалуйста, поделитесь соответствующим кодом, который вы пробовали, но не работает

Hemadri Dasari 13.12.2018 18:57

Пожалуйста, прочтите Как спросить и минимальный воспроизводимый пример.

Felix Kling 13.12.2018 19:00

Импортируйте код js, выберите жизненный цикл и реквизиты и попробуйте обновить его. Подробный жизненный цикл и примеры здесь responsejs.org/docs/react-component.html

Diogo Alves 13.12.2018 19:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
1 173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать метод forceUpdate с вашим экземпляром компонента, хотя использовать его не рекомендуется.

Вы также можете определить компонент с отслеживанием состояния и использовать метод компонента setState для повторного рендеринга вашего компонента с другими данными.

Вот пример stackblitz

Действительно, forceUpdate работает, и в вашем примере состояние компонента изменяется из внешнего кода, но это потому, что метод render () его меняет. Я попытался передать реквизит в componentInstance, но безуспешно. Есть ли способ передать параметр методу рендеринга?

Reedy 13.12.2018 21:25

Я обновил свой пример, так как props доступны только для чтения, вам нужно использовать setState, если вы хотите изменить данные извне

Olivier Boissé 13.12.2018 21:52

Спасибо, ваш обновленный пример помогает! Я не знал, что вы можете использовать setState таким образом

Reedy 14.12.2018 18:04

Другие вопросы по теме