【发布时间】:2021-02-09 23:31:02
【问题描述】:
我的组件(Material UI TransferList)接收 props.selectedItems 作为先前选择的项目的数组。在 props.Items 我有所有可用的项目。
我希望在 TransferList 的左侧面板中看到 props.selectedItems。但是,左侧面板是空的,右侧面板是满的,即使我只放了剩余的项目。
function TransferList(props) {
// props.items = [0,1,2,3,4,5,6,7]
console.log(props.selectedItems); // [2, 6]
let remainingItems = not(props.items, props.selectedItems);
console.log(remainingItems); // [0,1,3,4,5,7]
const [checked, setChecked] = useState([]);
const [right, setRight] = useState(remainingItems);
const [left, setLeft] = useState(props.selectedItems);
console.log(right); // [0,1,2,3,4,5,6,7] ?????????????????????????!!!!!!!!!!!!
console.log(remainingItems); // [0,1,3,4,5,7]
console.log(left); // [] ?????????????????????????!!!!!!!!!!!!
...
当我尝试 useEffect (from this question) 时,它并没有帮助我:
... // the same code above
useEffect(() => {
let remainingItems = not(props.items, props.selectedItems);
setRight(remainingItems);
setLeft(selectedItems);
console.log(right); // [0,1,2,3,4,5,6,7] ?????????????????????????!!!!!!!!!!!!
console.log(remainingItems); // [0,1,3,4,5,7]
console.log(left); // [] ?????????????????????????!!!!!!!!!!!!
}, [props.items, props.selectedItems]);
...
另外,当我使用简单数组而不从 props 获取它时,一切正常!
function TransferList(props) {
items = [0,1,2,3,4,5,6,7];
selectedItems=[2,6];
let remainingItems = not(items, selectedItems);
console.log(remainingItems); // [0,1,3,4,5,7]
const [checked, setChecked] = useState([]);
const [right, setRight] = useState(remainingItems);
const [left, setLeft] = useState(selectedItems);
console.log(right); // [0,1,3,4,5,7]
console.log(remainingItems); // [0,1,3,4,5,7]
console.log(left); // [2,6]
...
发生了什么事? )))
【问题讨论】:
标签: javascript reactjs material-ui use-effect use-state