Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Chamada única do serviço

Como a aplicação precisa da lista de autores em duas telas, pensei em fazer a chamada unica no App.js, enviando aos componentes filhos (children) os dados via props, e assinando à atualização da lista feita pelo Autor.js, como segue:

class App extends Component{

  constructor(){
    super();
    this.state={elementos:[], listaAutores:[]};
  }

  render(){
      return (
      <div id="layout">
          <a href="#menu" id="menuLink" className="menu-link">
              <span></span>
          </a>

          <div id="menu">
              <div className="pure-menu">
                  <Link className="pure-menu-heading" to="/">Company</Link>

                  <ul className="pure-menu-list">
                      <li className="pure-menu-item"><Link to="/" className="pure-menu-link">Home</Link></li>
                      <li className="pure-menu-item"><Link to="/autor" className="pure-menu-link">Autor</Link></li>
                      <li className="pure-menu-item"><Link to="/livro" className="pure-menu-link">Livros</Link></li>
                  </ul>
              </div>
          </div>

          <div id="main">
            {React.Children.map(this.props.children, child =>{
              return React.cloneElement(child, {lista: this.state.listaAutores});
            })}
          </div>

      </div>
    );
  }

  componentDidMount(){
    $.ajax({
        url:"http://cdc-react.herokuapp.com/api/autores",
        dataType:'json',
        success:function(resposta) {
        this.setState ({listaAutores: resposta});
        }.bind(this)
    });
    PubSub.subscribe('atualiza-lista-autores', function(topico,novaLista){
      console.log("atualiza-lista-autores", novaLista)
      this.setState({listaAutores:novaLista});
    }.bind(this));
  }
}

Nos demais pontos, onde utilizo a lista retirei a chamada o GET, e estou usando a lista recebida no props. Funcionou muito bem, porém me surgiu uma dúvida. Imagine 2 usuários utilizando o sistema, um cadastra autores e o outro os livros. Ao enviar o POST, a tabela de autores é atualizada perfeitamente (PubSub pro App, e volta a nova lista para o render da tabela), porém o Select do Livro, não é atualizado em outra aba do mesmo navegador. Como eu conseguiria resolver esse problema?

1 resposta
solução!

Fala ai Jefferson, tudo bem? Isso poderia ser feito de N maneiras.

O que você precisa é parecido com uma aplicação real time, ou seja, se você alterou os dados em uma aba outro navegador, todos que estão acessando a aplicação devem receber essa atualização.

Sugiro dar uma olhada em: Socket.io, PusherJS ou Firebase

Ambos vão te ajudar a garantir esse funcionamento, cada um do seu jeito.

Espero ter ajudado.