当前位置: 首页 > 知识库问答 >
问题:

React组件不呈现来自父级的道具

窦彦君
2023-03-14
 class CyInfo extends Component {

    foo(){
        console.log(this.props.id);
        return getAttributes(this.props.id)
    }

    render() {
        return ( <Info data = {this.foo()}> </Info>)
    }
}

该父级接收“props.id”并将数据值传递给由getAttributes()返回的子级。

export default class Info extends Component {
    constructor(props){
        super(props)
    }

    /*componentWillReceiveProps(nextProps){
        console.log(nextProps);
    */

    render() {
        console.log(this.props.data);
        return (
            <div id="info">{this.props.data}</div>
        )
    }
}

在child上,我可以在控制台和componentWillReceiveProps中看到props值,但数组没有呈现。我尝试使用react-devtool。在react-devtool中,道具似乎传递给了孩子,但不是渲染。有趣的是,在react-devtool中,当我改变数组的一些元素时,数组正在呈现。

我做错了什么。

编辑:[React-DevTool屏幕截图][1]

我编辑了react-devtool屏幕截图。道具是看似但组件只呈现初始值。在屏幕截图控制台错误是favicon,忽略它

编辑2:控制台打印道具阵列

编辑3:json.stringify(this.props.data)

共有2个答案

仲孙昊焱
2023-03-14

由于foo是一个函数,您必须以以下方式传递给子组件:

return ( <Info data = {() => this.foo()}> </Info>)

而且,数据是一个数组,您必须使用.map()呈现,如下所示:

export default class Info extends Component {
    constructor(props){
        super(props)
    }

    /*componentWillReceiveProps(nextProps){
        console.log(nextProps);
    */

    render() {
        console.log(this.props.data);
        return (
           <div id="info">{this.props.data.map(( element, index ) => {
            console.log(element);
            <span key={index}> {element}</span>})}
           </div>
        )
    }
}
张嘉熙
2023-03-14

道具来自函数(getattributes),它是异步调用一个方法,当这个道具传递给子级时,没有呈现。我直接在父子级中调用async方法,并在ComponentWillReceiveProps中用回调设置状态:

componentWillReceiveProps(nextProps){
    self = this;
    AsyncFunc(nextProps.id ,(error, result) => {
        self.setState({data:result})
    });
}

并呈现为

    return (<div id="info">
        {Array.isArray(this.state.data) && this.state.data.map((data) => {
            return <div key={data._id}>{data.class}{data.predicate}{data.yuklem}</div>
        })}</div>
    )
 类似资料:
  • 我在一个表单上有一个TextField输入,问题是当我在它上键入时,刚刚键入的值的显示/呈现有一种延迟,我想防止这种延迟。 代码:

  • 问题内容: 我是新来的世界,我有这样的话: 然后单击,您将被打印在控制台上。现在将行更改为: 现在点击该按钮,我希望它会被渲染。但事实并非如此。 我不确定为什么会这样。请注意,我在方法中有上面的代码。 问题答案: 您可能希望有一个状态组件,该状态组件在单击按钮之后在按钮旁边显示另一个组件。您需要做的就是跟踪按钮是否被单击:

  • 在父组件中: 我有一个布尔状态: 我将其发送到子组件: 根据布尔值,我希望它呈现不同的组件。

  • parentcomponent.js ChildComponent.js 为什么在单击后,子组件仍然显示旧值而不重新呈现?

  • 对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:

  • 我是一个react Noob(以前在angular工作过很多次),我有一个关于根据父母的输入刷新react功能性子组件的问题。 下面这个例子中的问题是,我试图从一个promise中获取一些数据,然后将它们作为道具传递给一个子组件。我用一个道具值“fake Url 1”初始化子级,并用useEffect()中的promise中的值替换它,这是组件加载后加载的第一个钩子。但即使我从父母那里换了道具,孩