我的TranslationDetail组件在打开时会被传递一个id,并基于此在类构造函数中触发一个外部api调用,接收状态数据,该数据将显示在TranslationDetail上.

//Routing:
<Route path="/translation/:id" component={TranslationDetail}/>

//Class:    
class TranslationDetail extends Component {
  constructor(props){
    super(props);

    this.props.fetchTrans(this.props.params.id);
  }

如果我手动输入url,这一切都很好.如果我想使用react router,例如显示下面的下一个项目,url确实会更改,但不会触发api调用,数据将保持不变.

<button 
  type="button"
  onClick={() => 
    browserHistory.push(`/translation/${Number(this.props.params.id)+1}`)}>
  Next
</button>

请记住我是个完全的初学者.发生这种情况的原因是我相信构造函数只运行一次,因此不会触发进一步的api调用.

我该怎么解决这个问题?

推荐答案

构造函数不是进行API调用的正确位置.

您需要使用生命周期事件:

确保将props 与componentDidUpdate中之前的props 进行比较,以避免在你关心的特定props 没有改变的情况下获取props .

class TranslationDetail extends Component {    
   componentDidMount() {
     this.fetchTrans();
   }

   componentDidUpdate(prevProps) {
     if (prevProps.params.id !== this.props.params.id) {
       this.fetchTrans();
     }
   }

   fetchTrans() {
     this.props.fetchTrans(this.props.params.id);
   }
}

Reactjs相关问答推荐

为什么我的标签在Redux API中不能正常工作?

滚动事件监听器在Next.js客户端组件中不触发

基本react 应用程序正在触发两次Use Effect

useCallback()是否应该用于作为prop传递给子组件的函数,即使该组件包装在memo()中?

React路由dom布局隐藏内容

如何在一个 Next.js 项目中使用两种布局?

获取 不能显示为 的后代.错误,但不太确定如何构建我的代码以避免此警告

为什么 useEffect 的初始化对于加载 localStorage 不起作用?

我可以在加载器函数中多次 fetch() 并使用一次 useloaderdata() 提取它吗?

Next.js 和理智 | npm run build 时预渲染页面/时发生错误

当我在 React Router Dom 中使用两个参数并直接在页面上导航时,数据获取没有发生

Stripe Checkout:是否可以创建不自动续订的订阅?

NextJS htaccess 设置

使用 React.lazy 调试 webpack 代码拆分

React Native PermissionsAndroid 不包括 READ_MEDIA_IMAGES.如何解决这个问题?

将路径数组传递给Route会引发错误

具有自动完成功能的 Formik material ui 无法按预期工作

父状态改变后子组件丢失状态

在 Remix 中使用 chartjs 和 react-chartjs-2 会出现错误react-chartjs-2未在您的 node_modules 中找到

交换键仍然引入了 fresh 的 DOM 元素