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

React useState挂钩未触发子组件的重新渲染

微生昌胤
2023-03-14

我有一个父功能组件

<代码>

当我从下拉列表中选择一个新值时,调用handleChange(),调用setData(),我看到状态正在更新,但

EditCard组件代码

export default function EditCard(props) {
    const [data, setData] = useState(props.data);

    const handleChange = () => event => {
        let d = data;
        d.assignCategory = event.target.value;
        setData(d);
    };

    let assignCategoryCol = data.assignCategory !== undefined ? <AssignCategoryCol data={data} handleChange={handleChange}/> : <></>;

    return (
        <div>
            {assignCategoryCol}
            <Button>Update</Button>
        </div>
    )
}

{props.data.bucketTotal}`} <Lock/></Typography>)
};

const AssignCategoryCol = (props) => {
    return (
        <CategoryDropdown id={props.data.id} assignedCategory={props.data.assignCategory} handleDropdownChange={props.handleChange}/>)
};

const useStyles = makeStyles(theme => ({}));

类别水解组分

class CategoryDropdown extends Component {
    constructor(props) {
        super(props);
        //TODO Get Categories from DB and set default
        this.state = {
            categories: ['Select One', 'Category1', 'Category2', 'Category3'],
        };
    }

    render() {
        return (
            <div id={'categoryDropdown'}>
                <Select onChange={this.props.handleDropdownChange(this.props.id)} value={this.props.assignedCategory}>
                    {this.state.categories.map((category) => {
                        return <MenuItem value={category}>{category}</MenuItem>
                    })}
                </Select>
            </div>
        )
    }
}


const styles = theme => ({});

export default withStyles(styles)(CategoryDropdown)

共有2个答案

宫弘亮
2023-03-14

对我来说,当url由setState更新时,HTML5视频没有更新,这是一个问题。我也已经在做玛雅提到的上述事情了。

我的解决方法是在元素中添加一个

例如。

<代码>

邢献
2023-03-14

为了让React知道状态发生了变化,您需要用一个全新的对象替换当前对象。目前,反应看到它是相同的对象,所以什么也不做。它不会搜索对象以查看其中是否有任何属性已更改。

在HandleChange事件处理程序中,您有:

let d = data;

这不是复制数据对象。相反,现在变量“d”指向变量“data”指向的同一对象(内存中)。

(有关更多信息,请阅读“通过引用传递”与“通过值传递”)。

要解决这个问题,请参阅下面的析构/复制:

const [data, setData] = useState(props.data)

const handleChange = event => {
        let newData = {...data} //copy the object
        newData.assignCategory = event.target.value;
        setData(newData);
 };
 类似资料:
  • 我对react还比较陌生,我一直在分解一个web应用程序,并用react组件替换部分。我现在正在开发一个组件,其中包含我创建的几个不同组件。 在新组件中,我在componentDidMount函数中进行API调用,并创建子组件。乍一看,一切看起来都很完美,但当我们在其中一个子组件中进行状态更改,然后在父组件中进行更改时,子组件将其状态重置为更改之前的状态。 我知道发生了什么,州政府没有被传递给家长

  • 问题内容: 考虑下面的钩子示例 基本上,我们使用this.forceUpdate()方法强制组件在React类组件中立即重新呈现,如以下示例所示 但是我的查询是如何强制上述功能组件立即使用挂钩重新渲染? 问题答案: 可以使用或进行,因为在内部使用: 不打算在正常情况下使用,仅在测试或其他出色情况下使用。可以以更常规的方式解决这种情况。 是使用不当的例子,是异步的性能,而且不应该被强迫只是因为状态更

  • 问题内容: Parent(在我的示例中)组件通过Child()组件呈现一个数组。父级决定更改数组中的属性,React触发子级重新渲染的方式是什么? 调整数据后,我想出的只是在Parent中。这是触发更新的hack还是React方法? JS小提琴:https: //jsfiddle.net/69z2wepo/7601/ 问题答案: 这里的问题是您要在中存储状态,而不是。由于此组件是mutating

  • 我有一个使用输入钩子组件,其工作原理如下: 它获取一个(input,inputName)并返回一个挂钩的输入组件。当我想动态地改变视图中现有输入的可见性时,我得到一个错误:渲染的钩子比之前渲染的多。

  • 尽管试图避免所有记录在案的陷阱,阻止React在状态更改后重新渲染,但我仍然无法解决我的问题: } 从每个长方体组件调用update函数,并触发长方体网格上新颜色的指定。 试图避免常见的错误: 颜色数组只有在通过扩展运算符从状态复制后才被修改 通过setState()传递新数组 此外,我还处理了两个组件中函数的实例绑定 但是,尽管onClick成功触发了状态更改,但不会进行重新渲染。我在这里缺少的

  • 我试图在我的自定义模块中添加一个钩子,但在我在prestashop backoffice或使用webservice添加一个客户后,它不会被触发。 我试图注册的钩子名称是“actionCustomerAccountAdd”。 这是模块的相关代码。你能帮我吗?我是一名PHP开发人员,但这是我第一次在Prestashop端进行开发。 我有此代码来签入日志文件或页面,但它没有被激发: 非常感谢。