因此,我目前正在使用从API检索对象的管理控制台。

该API有两个不同的端点,它们是:

http://localhost:3000/videos
http://localhost:3000/manuals


API的返回对象均带有数据集,例如“ id,url,title和thumbnailUrl”

我有一个负责该卡的模块,该模块具有以下代码:

export interface Manual {
  id?: string | number;
  url: string;
  title: string;
  thumbnail?: string | null;
}


我有一个模块负责创建实际的帮助卡组件
然后将HelpCard组件加载到我的HelpList组件中
最后,我有我的HelpAdmin.view模块,可以将所有内容组合在一起

问题是,即使我打电话给

console.log(this.props.data);


在我的HelpList模块中,返回了8个空数组,如下所示:

[]
length: 0
__proto__: Array(0)


我很好奇为什么我的视频/手动卡实际上没有显示在列表中?

预先感谢您的阅读和帮助。

最佳答案

手册和视频数据处于HelpList组件的状态,但您使用的是this.props.data.map,它是使用data = {this.state.videos}从HelpListAdmin中清空的。

因此,您需要在HelpList组件的呈现器中替换这样的相关代码。

              {this.state.manuals.map((card: Manual) => (
                <HelpCard
                  card={card}
                  key={card.id}
                  deleteProduct={this.props.onDelete}
                  editProduct={this.props.onEdit}
                  type={this.props.type}
                />
              ))}



但是,如果要管理HelpAdminView组件中的状态,则需要在此组件而不是HelpList组件中进行api调用。

而且我认为您应该将状态保留在父级(HelpAdminView)中,并将手册和视频传递给HelpList组件。

因此,您需要将此代码从HelpList移到HelpAdminView。

  async componentDidMount() {
    const res = await axios.get(this.state.url);
    this.setState({ card: res.data });
    this.loadAdminHelpCard("videos");
    this.loadAdminHelpCard("manuals");

    //console.log(res.data);
  }


  loadAdminHelpCard = (type: "videos" | "manuals"): void => {
    const baseApiUrl = `http://localhost:3000`;
    const url = `${baseApiUrl}/${type}`;
    axios
      .get(url)
      .then((res) => {
        this.setState({ [type]: res.data } as any);
      })
      .catch(function(error) {
        // handle error
        console.log(error);
      });
  };


删除帮助列表组件中的状态。

并将视频和手册作为道具(就像您现在所做的那样)传递给HelpList组件。

      <div className="listDisplay">
            <div>
              <div style={{ textAlign: "center" }}>
                <h2>Videos</h2>
              </div>
              <HelpList
                data={this.state.videos}
                type="videos"
                onEdit={this.editProduct}
                onDelete={this.deleteProduct}
              />
            </div>
            <div>
              <div style={{ textAlign: "center" }}>
                <h2>Manuals</h2>
              </div>
              <HelpList
                data={this.state.manuals}
                type="manuals"
                onEdit={this.editProduct}
                onDelete={this.deleteProduct}
              />
            </div>
          </div>


并在HelpList组件中使用此道具(就像您现在所做的那样)。

export default class HelpList extends Component<Props, State> {

  static props: any;

  render() {
    console.log(this.props.data);

    return (
      <React.Fragment>
        {this.state.card ? (
          <div className="row">
            {this.props.data.map((card: Manual) => (
              <HelpCard
                card={card}
                key={card.id}
                deleteProduct={this.props.onDelete}
                editProduct={this.props.onEdit}
                type={this.props.type}
              />
            ))}
          </div>
        ) : (
          <h1>
            <br></br>Loading Cards...
          </h1>
        )}
      </React.Fragment>
    );
  }
}

09-25 16:44