我有一个父功能组件
<代码>
当我从下拉列表中选择一个新值时,调用
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)
为了让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端进行开发。 我有此代码来签入日志文件或页面,但它没有被激发: 非常感谢。