reactjs - 组件在道具更新时重新初始化
问题描述
我有一个formik
基于内部的步骤向导的组件。
我使用useField
,useEffect
和useState
钩子如下:
const [counts, countsMeta, countsHelpers] = useField('counts');
const [visible, setVisible] = useState(false);
useEffect(() => {
countsHelpers.setValue(
Array(event.book && event.book.length ? event.book.length : 0).fill(0)
);
// eslint-disable-next-line
}, [event.book]);
我知道 myuseEffect
应该只被调用一次,无论如何只要event.book
永远不变。
我还有一种申请优惠券的方法,如下所示:
<div className={styles.coupon}>
<FontAwesomeIcon
icon={faPlusSquare}
onClick={() => setVisible(!visible)}
/>{' '}
coupon code
{visible && (
<div>
<input
id='coupon'
type='text'
value={values.coupon || ''}
onChange={onChange}
placeholder='Coupon code'
className={errors.coupon ? styles.error : ''}
/>
<div
className={styles.apply}
onClick={() => loadPromo(values.coupon)}
>
Apply
</div>
</div>
)}
</div>
loadPromo()
由于某种原因,当我调用我的组件重新初始化时,我无法确定。一旦发生,状态和字段将被重置,例如visible
再次设置为false
并counts
用零重新初始化数组。之后,一切正常。
我错过了什么?
解决方案
推荐阅读
- android - 不断收到解析错误启动文件提供程序意图
- sql - 如何将现有主键替换为另一个现有主键以合并两条不同的记录?
- scala - 如何将收到的消息广播到两个不同的流
- javascript - 如何使用 VueJS 和 ChartJS 更新图表
- excel - VBA Excel列排序运行时错误1004
- android - 在 Xamarin Forms 中更改 Android 版本(目标框架)时出错
- java - Vaadin 8:错误 java.lang.NoSuchMethodError:com.vaadin.ui.MenuBar.addItem 与 GridContextMenu 3
- c# - 找不到已安装但已过期的证书?
- android - 构建失败,显示错误“已为元素“EditText”指定属性“android:focusable”
- .net-core - .NET Core 项目未打开,抱怨 WPF 和其他不相关的东西