Обновить элемент в ReactJS

194
16 марта 2018, 15:28

Как обновить элемент HelloWorld из функции updateHelloWorld и вообще это возможно?

Пример кода:

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import registerServiceWorker from './registerServiceWorker';
function getServerData() {
  // Получаем данные с сервера 
  data = new GetServerData() 
  return data.data
}
function updateHelloWorld() {
   // Магия которая должна обновить элемент 
} 
class HelloWorld extends React.Component {
  render() {
    return (
      <h1>Hello world  {getServerData}</h1>
    );
  }
}
class ButtonClisk extends React.Component {
  render() {
    return (
      <div>
        <button onClick={updateHelloWorld}>Обновить</button>
      </div>
    );
  }
}
ReactDOM.render(
  <div>
    <HelloWorld />
    <ButtonClisk />
  </div>,
  document.getElementById('root') as HTMLElement
);
registerServiceWorker();
Answer 1

Это возможно, но делаете вы это не правильно.

Вот простейший пример реализации, более подробно лучше почитать в учебниках. Попробуйте этот или этот для начала, оба на русском языке.

// Получаем данные с сервера 
// допустим, это какой-то сервер или библиотека, которую вы подключаете в своём проекте 
function getServerData() { 
  return 'SERVER DATA: ' + new Date(); 
} 
 
// это может быть функция, которая вызывается в экшене (если использовать редакс) 
function updateHelloWorld() { 
  const serverData = getServerData(); 
  console.log('data:', serverData); 
  return serverData; 
}  
 
// первый дочерний компонент 
class HelloWorld extends React.Component { 
  render() { 
    const data = this.props.data; 
    return ( 
      <div> 
        { data ? 
          data : 
          <h1>Hello world</h1> 
        } 
      </div> 
    ); 
  } 
} 
 
// второй дочерний компонент 
class ButtonClick extends React.Component { 
  render() { 
    const { onClick } = this.props; 
    return ( 
      <div> 
        <button onClick={onClick}>Обновить</button> 
      </div> 
    ); 
  } 
} 
 
// родительский компонент 
// он хранит в себе состояние и реагирует на событие/передаёт полученные данные нужному компоненту  
class App extends React.Component { 
  constructor(props) { 
    super(props); 
    this.state = { data: '' }; 
    this.handleClick = this.handleClick.bind(this); 
  } 
   
  handleClick() { 
    const data = updateHelloWorld(); 
    this.setState({ data: data }); 
  } 
   
  render() { 
    const data = this.state.data; 
    return ( 
      <div> 
        {/* данные передаются через пропсы */} 
        <HelloWorld data={data} /> 
        {/* обработчик также передаётся через пропсы */} 
        <ButtonClick onClick={this.handleClick} /> 
      </div> 
    ); 
  } 
} 
 
ReactDOM.render( 
  <App />, 
  document.getElementById('root') 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
<div id="root"></div>

READ ALSO
Проверка состояния promise в angularjs

Проверка состояния promise в angularjs

Есть сервис который делает запрос через $http , в обработке запроса (неважно resolve или reject) , я возвращаю какие то данные через return, в итоге сервис...

165
Плохо работает баланс скобок JavaScript [дубликат]

Плохо работает баланс скобок JavaScript [дубликат]

На данный вопрос уже ответили:

307
Самопроизвольное выполнение action в redux

Самопроизвольное выполнение action в redux

Имеется такой код(прилагаю важные части для понимания)Игра найди пару

189