[英]Child component not updating on props update
我在反應中更新我的子組件時遇到了一些麻煩。 我有使用Switch
子組件的SettingsForm
組件。
Switch
接受updateValue
方法作為 prop 並使用它來更新父組件中on
prop 的值。 出於某種原因on
道具上的價值沒有傳播給孩子。 在初始加載時,組件設置正確,但之后它永遠不會反映父級中的更改。 我可以安慰並查看父項中的值正在更改,但子項永遠不會更新。
我以前在類組件中使用過這個子組件,它工作正常。 功能組件出現問題。
設置表單.js
import React, { useState } from 'react'
import { Input, Label } from 'reactstrap'
import Switch from '../../../../components/Input/Switch/Switch'
export default function SettingsForm ({ settingOne, settingTwo, enabled, updateSettings}) {
const [settings, setSettings] = useState({
settingOne: settingOne,
settingTwo: settingTwo,
enabled: enabled
})
/**
* Update values for select inputs
*
* @param {event} event
*/
const updateSwitch = (event) => {
const name = event.target.name
const value = event.target.checked
settings[name] = value
setSettings(settings)
}
return (
<div className={"settings-form"}>
<div className="row">
<div className="col-sm">
<div className="row">
<div className="col-sm-1">
<Switch
id={'settingOne'}
name={'settingOne'}
value={settingOne}
on={settingOne}
updateValue={updateSwitch}/>
</div>
<div className="col-sm-10">Turn Setting One On</div>
</div>
<div className="row">
<div className="col-sm-1">
<Switch
id={'settingTwo'}
name={'settingTwo'}
value={settingTwo}
on={settingTwo}
updateValue={updateSwitch}/>
</div>
<div className="col-sm-10">Turn Setting Two On</div>
</div>
</div>
<div className="col-sm">
<div className="row">
<div className="col-sm-1">
<Switch
name={'enabled'}
value={enabled}
id={'enabled'}
on={enabled}
updateValue={updateSwitch}/>
</div>
<div className="col-sm-10">Enable Item</div>
</div>
</div>
</div>
<div className="row">
<div className="col">
<button type="button" onClick={updateSettings(settings)}>Update Settings</button>
</div>
</div>
</div>
)
}
切換.js
import React, { Component } from 'react';
import style from './switch.css';
class Switch extends Component {
constructor(props) {
super(props);
}
render() {
return (
<React.Fragment>
<label className={style.switch}>
<input
type="checkbox"
name={this.props.name}
id={this.props.id}
onClick={this.props.updateValue}
checked={this.props.on}
onChange={() => {}}
/>
<span className={style.slider + ' ' + style.round}></span>
</label>
</React.Fragment>
)
}
}
export default Switch;
通過改變settings
對象,當你調用setSettings
時,React 不會認為它已經更新。
您可以改為創建settings
對象的副本並使用它更新您的狀態。
const updateSwitch = event => {
const { name, value } = event.target;
const newSettings = { ...settings, [name]: value };
setSettings(newSettings);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.