亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法在基于反應類的組件中安裝組件

無法在基于反應類的組件中安裝組件

慕容森 2021-11-12 16:40:41
我正在使用 react 16.8 我使用鉤子和功能組件制作了一個項目,現在我試圖將它變成基于類的組件,但沒有安裝一個組件。在 app.js 中,我在 componentDidUpdate 中獲取數據,它工作正常,沒有問題。Element.js 還渲染組件并創建鏈接 onclick 我正在更新狀態并通過傳遞不起作用的道具來調用彈出組件。應用程序.jsimport React, { Component } from 'react';import './App.css';import axios from 'axios';import Element from './components/Element';class App extends Component {  constructor(props) {    super(props);    this.state = { elements: [] };  }  componentDidMount() {    const res = async () => {      const result = await axios.get('/data');      const data = result.data;      this.setState({ elements: data });    };    res();  }  render() {    return (      <div className='wrapper'>        <div id='table'>          {this.state.elements.map(element => (            <Element elements={element} key={element._id} />          ))}        </div>      </div>    );  }}export default App;在 Element.js 中,我為所有元素創建鏈接并創建路由部分。Onclick 使 showpopup 為 true 并將道具傳遞給 popup。當彈出窗口在路由之外被調用時,它正在工作。但是在每個組件上點擊我必須傳遞不同的道具并顯示相同的彈出窗口。 元素.jsimport React, { Component } from 'react';import {  BrowserRouter as Router,  Redirect,  Route,  Link} from 'react-router-dom';import Popup from './Popup';class Element extends Component {  constructor(props) {    super(props);    this.state = { showPopup: false };  }  handleClick = () => {    this.setState({ showPopup: !this.state.showPopup });  };    
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

您提供的路徑只是一個字符串,因此將其更改為如下所示的表達式。


<Route

  exact

  path={`/:${this.props.elements.name}`}

  component={props => <Popup element={this.props.elements} />}

/>;


查看完整回答
反對 回復 2021-11-12
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

從這個鏈接(https://tylermcginnis.com/react-router-pass-props-to-components):

當你使用組件 props 時,路由器使用 React.createElement 從給定的組件創建一個新的 React 元素。這意味著如果您為組件屬性提供內聯函數,您將在每次渲染時創建一個新組件。這會導致卸載現有組件并安裝新組件,而不僅僅是更新現有組件。

所以你的行 element.js 必須是

 render={props => <Popup element={this.props.elements} />}

而不是這個。

 component={props => <Popup element={this.props.elements} />}

此外,路徑必須更正為:

路徑={ /:${this.props.elements.name}}


查看完整回答
反對 回復 2021-11-12
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

這是錯誤的部分。

 path='/:this.props.elements.name'

它應該如下所示:

 path={`/:${this.props.elements.name}`}


查看完整回答
反對 回復 2021-11-12
  • 3 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號