Tìm kiếm trang web

javascript - MUI ToggleButton đặt màu nền được chọn một cách động


const StyledToggleButton = styled(MuiToggleButton)(({ selectedColor }) => ({
    "&.Mui-selected, &.Mui-selected:hover": {
        backgroundColor: selectedColor,
    }
}));
const FilterTeam = (props) => {
  const [view, setView] = useState(1);
  const handleChange = (event: any, nextView: any) => {
    setView(nextView);
  };

  return (
   <ToggleButtonGroup
    orientation="horizontal"
    value={view}
    exclusive
    onChange={handleChange}
   >
    { Object.values(teams).map((teamObject: any, index) =>
     <StyledToggleButton
      key={teamObject.team}
      className={classes.toggleButton}
      value={teamObject.team}
      selectedColor={teamObject.colorTheme}
     >
      <img className={classes.teamLogo}
        alt="team logo" src={teamObject.logo} />
     </StyledToggleButton>
    )}
   </ToggleButtonGroup>
  );
}

export default FilterTeam

Tôi liên tục nhận được: Cảnh báo: React không nhận dạng selectedColorprop trên một phần tử DOM. Nếu bạn thực sự muốn nó xuất hiện trong DOM như một thuộc tính tùy chỉnh, hãy viết nó bằng chữ thườngselectedcolorthay vào đó. Nếu bạn vô tình truyền nó từ một component cha, hãy loại bỏ nó khỏi phần tử DOM.. Tôi đã xem qua một vài sandbox triển khai tương tự nhưng tôi đang thử trên TypeScript nên không chắc cách nó chuyển đổi. Tôi đã tham khảo https://codesandbox.io/s/69707814-set-selected-color-of-toggle-button-group-mui-5l5lh?file=/demo.js

Câu trả lời #1

Bạn có thể sử dụng tùy chọn shouldForwardProp cho styled để ngăn prop selectedColor được truyền tiếp đến ToggleButton (mà sau đó nó lại truyền prop này đến phần tử DOM).

const ToggleButton = styled(MuiToggleButton, {
  shouldForwardProp: (prop) => prop !== "selectedColor"
})(({ selectedColor }) => ({
  "&.Mui-selected, &.Mui-selected:hover": {
    color: "white",
    backgroundColor: selectedColor
  }
}));

Tài liệu về Emotion: https://emotion.sh/docs/styled#customizing-prop-forwarding

Câu trả lời liên quan: @mui/system -- làm thế nào để truyền các props tạm thời cho styled()