You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件间数据传递报错排查及实现方法咨询

错误原因与解决方案

错误原因

TypeScript 无法识别子组件 SearchResults 接受 setSearchResultProps 这个 props,本质是组件的 Props 类型声明没有被正确关联,导致 TypeScript 认为子组件的 Props 是空类型 {},因此抛出属性不存在的错误。

修复步骤与代码示例

1. 修复子组件的类型绑定与方法调用

子组件需要明确将自定义的 Props 接口传递给 Component 的泛型参数,同时修复调用方法时缺少参数的问题:

// SearchResults.tsx
import React, { Component } from 'react';

// 定义子组件接受的Props类型
interface SearchResultsProps {
  setSearchResultProps: (result: any) => void;
}

// 绑定Props类型到Component泛型
class SearchResults extends Component<SearchResultsProps> {
  someFunction = () => {
    // 调用父组件传递的方法时,传入符合类型要求的数据
    this.props.setSearchResultProps({ id: 1, content: "搜索结果示例" });
  };

  render() {
    return (
      <div>
        {/* 添加触发按钮,用于测试数据传递 */}
        <button onClick={this.someFunction}>向父组件传递数据</button>
      </div>
    );
  }
}

export default SearchResults;

2. 优化父组件的类型声明(可选)

父组件的逻辑本身没问题,可给 Component 添加泛型声明,让类型检查更严谨:

// ParentComponent.tsx
import React, { Component } from 'react';
import SearchResults from './SearchResults';

// 泛型参数:第一个是空Props,第二个是State类型
class ParentComponent extends Component<{}, { searchResult: any | null }> {
  constructor(props: {}) {
    super(props);
    this.state = {
      searchResult: null,
    };
  }

  setSearchResult = (result: any) => {
    console.log('test setSearchResult ');
    this.setState({ searchResult: result });
    // 打印收到的数据,验证传递是否成功
    console.log("父组件收到数据:", this.state.searchResult);
  };

  render() {
    return (
      <div>
        <SearchResults setSearchResultProps={this.setSearchResult} />
      </div>
    );
  }
}

export default ParentComponent;

功能说明

修改完成后,点击子组件的按钮,会触发 someFunction,调用父组件传递的 setSearchResultProps 方法,将数据传递给父组件并更新父组件的 state,完成子组件向父组件传递数据的功能。

内容的提问来源于stack exchange,提问作者Mot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:41:10