似乎无法更改组件的道具
Cannot seem to change props of component
我有以下两个组件:
I'll be skipping import
s and export
s in this question for sake of readability
Explorer.js
const Explorer = () => {
const [selected, setSelected] = useState('C');
let dirArr = [
<Program key={"C"} name="C" isSelected={true}/>,
<Program key={"D"} name="D" isSelected={false}/>
];
const changeSelection = (newSelection) => {
if (selected !== newSelection){
dirArr = dirArr.map((el) => {
switch (el.props.name){
case newSelection:
case selected:
return <Program key={el.props.name} name={el.props.name} isSelected={!el.props.isSelected}/>
default:
return el
}
});
}
setSelected(newSelection);
}
const handleClick = (e) => {
//TODO: Make sure only <Program> allowed
changeSelection(e.target.parentNode.firstElementChild.innerHTML);
}
return (
<div onClick={handleClick}>
{dirArr}
</div>
)
}
基本上是我想要做的,点击取消选择先前突出显示的组件并突出显示新组件。
因此在 map
中,我在旧的 selected
元素和 newSelection
上翻转 isSelected
道具
return <Program key={el.props.name} name={el.props.name} isSelected={!el.props.isSelected}/>
然后是Program.js
const Program = (props) => {
const [name, setName] = useState(props.name);
const [size, setSize] = useState(0);
const [date, setDate] = useState('01.01.75');
const selectedDeterminer = () => {
return props.isSelected ? { background: 'blue'} : {}
}
return (
<div style={selectedDeterminer()}>
<section className="program-name">{name}</section>
<section className="program-size">{size}</section>
<section className="program-date">{date}</section>
</div>
)
}
根据控制台日志记录,我确定我选择的是元素名称或 el.props.isSelected
正确,它只是在返回的地图上,它似乎不会影响结果
我想问题是您使用的是静态 isSelected
道具 - 您需要使用状态 selected
变量:
let dirArr = [
<Program key={"C"} name="C" isSelected={selected === 'C'}/>,
<Program key={"D"} name="D" isSelected={selected === 'D'}/>
];
我有以下两个组件:
I'll be skipping
import
s andexport
s in this question for sake of readability
Explorer.js
const Explorer = () => {
const [selected, setSelected] = useState('C');
let dirArr = [
<Program key={"C"} name="C" isSelected={true}/>,
<Program key={"D"} name="D" isSelected={false}/>
];
const changeSelection = (newSelection) => {
if (selected !== newSelection){
dirArr = dirArr.map((el) => {
switch (el.props.name){
case newSelection:
case selected:
return <Program key={el.props.name} name={el.props.name} isSelected={!el.props.isSelected}/>
default:
return el
}
});
}
setSelected(newSelection);
}
const handleClick = (e) => {
//TODO: Make sure only <Program> allowed
changeSelection(e.target.parentNode.firstElementChild.innerHTML);
}
return (
<div onClick={handleClick}>
{dirArr}
</div>
)
}
基本上是我想要做的,点击取消选择先前突出显示的组件并突出显示新组件。
因此在 map
中,我在旧的 selected
元素和 newSelection
isSelected
道具
return <Program key={el.props.name} name={el.props.name} isSelected={!el.props.isSelected}/>
然后是Program.js
const Program = (props) => {
const [name, setName] = useState(props.name);
const [size, setSize] = useState(0);
const [date, setDate] = useState('01.01.75');
const selectedDeterminer = () => {
return props.isSelected ? { background: 'blue'} : {}
}
return (
<div style={selectedDeterminer()}>
<section className="program-name">{name}</section>
<section className="program-size">{size}</section>
<section className="program-date">{date}</section>
</div>
)
}
根据控制台日志记录,我确定我选择的是元素名称或 el.props.isSelected
正确,它只是在返回的地图上,它似乎不会影响结果
我想问题是您使用的是静态 isSelected
道具 - 您需要使用状态 selected
变量:
let dirArr = [
<Program key={"C"} name="C" isSelected={selected === 'C'}/>,
<Program key={"D"} name="D" isSelected={selected === 'D'}/>
];