簡體   English   中英

componentDidUpdate(prevProps, prevState, snapshot): prevProps 未定義

[英]componentDidUpdate(prevProps, prevState, snapshot): prevProps is undefined

我對 React 很陌生,我正在嘗試構建這個簡單的 web 應用程序,該應用程序將股票標簽作為輸入並根據給定股票的表現更新圖表。 但是,我無法更新我的圖表。 我嘗試使用 componentDidUpdate(prevProps, prevState, snapshot),但由於某種原因 prevProps 未定義,我不知道/不明白為什么。 我嘗試在線搜索並閱讀文檔文件,但我仍然無法弄清楚。 任何幫助,將不勝感激。

 import Search from './Search.js' import Graph from './Graph.js' import Sidebar from './Sidebar.js' import './App.css' import React, { Component } from 'react'; class App extends Component { constructor(props) { super(props); this.state = { data: [{ x: [], close: [], decreasing: { line: { color: '#FF0000' } }, high: [], increasing: { line: { color: '#7CFC00' } }, line: { color: 'rgba(31,119,180,1)' }, low: [], open: [], type: 'candlestick', xaxis: 'x', yaxis: 'y' }], layout: { width: 1500, height: 700, font: { color: '#fff' }, title: { text: 'Stock', xanchor: "left", x: 0 }, paper_bgcolor: '#243b55', plot_bgcolor: '#243b55', yaxis: { showgrid: true, color: '#fff' }, xaxis: { zeroline: true, color: '#fff', showgrid: true, rangeslider: { visible: false } } }, searchfield: '', stocktag: ' ' }; this.onSearchChange = this.onSearchChange.bind(this); this.onSubmitSearch = this.onSubmitSearch.bind(this); } componentDidMount() { document.body.style.backgroundColor = '#243b55'; this.loadGraphInfo(); } componentDidUpdate(prevProps, prevState, snapshot){ console.log(prevProps.stocktag); console.log(prevState.stocktag); if (prevProps.stocktag.== prevState.stocktag) { //this;fetchData('SPY'). } } onSearchChange = (event) => { var search = event.target;value. this:setState({ stocktag; search }). } onSubmitSearch = (e) => { var search = this.state;searchfield. this:setState({ stocktag; search }). } fetchData(stock) { //GET DATA //UPDATE STATE } loadGraphInfo() { if (this.state.stocktag == ' ') { this;fetchData('SPY'). } else { this.fetchData(this.state;stocktag). } } render() { return ( <div className="App" > <Sidebar /> <Search searchChange={this.onSearchChange} submitChange={this.onSubmitSearch} /> <Graph data={this.state.data} layout={this.state;layout} /> </div> ); } } export default App;

 import React, { Component } from 'react'; import './Search.css' const Search = ({ searchChange, submitChange }) => { return ( <div> <div class="SearchCompInput"> <input class="SearchBar" type="text" onChange={searchChange}/> </div> <div class="SearchCompButton"> <button class="SearchButton" onClick={submitChange}>Search</button> </div> </div> ); } export default Search;

prevProps.stocktag 未定義,因為您沒有將任何道具傳遞給 App 組件。 在你的 index.js 中嘗試這個,你會看到 preProps 值,但實際上它沒有任何意義。

render(<App stocktag='' />, document.getElementById('root'));

   
componentDidUpdate(prevProps, prevState, snapshot){
        console.log(prevProps.stocktag);
        console.log(prevState.stocktag);

        if (prevProps.stocktag !== prevState.stocktag) {
           //this.fetchData('SPY');
       }
   }

我不太確定您要在這里完成什么,但我注意到的第一件事是您將stocktag 的狀態設置為this.state.searchfield,它在您的onSubmitSearch function 中是“”。

    onSearchChange = (event) => {
        var search = event.target.value;
        this.setState({ stocktag: search });
    }

    onSubmitSearch = (e) => {
        var search = this.state.searchfield;
        this.setState({ stocktag: search });
    }

添加我還想補充一點,將輸入值設置為 state 值是一種很好的做法,如下所示

import React, { Component, useState } from 'react';
import './Search.css'

const Search = ({ searchChange, submitChange }) => {
const [inputValue, setInputValue] = useState('')

  const handleChange = (e) => {
    setInputValue(e.target.value)
    searchChange(e)
  }
    return (
        <div>
            <div class="SearchCompInput">
                <input class="SearchBar" type="text" value = {inputValue} onChange={handleChange}/>
            </div>
            <div class="SearchCompButton">
                <button class="SearchButton" onClick={submitChange}>Search</button>
            </div>
        </div>
    );
}

export default Search;

我遇到了這個問題,這是因為有一個孩子 class 正在調用super.componentDidUpdate()而沒有傳入參數。 所以孩子 class 看起來像:

  componentDidUpdate() {
      super.componentDidUpdate();
      ... <-- other stuff
  }

我不得不將其更改為:

  componentDidUpdate(prevProps, prevState) {
      super.componentDidUpdate(prevProps, prevState);
      ... <-- other stuff
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM