如何从 class 组件 (parent) 更改功能组件 (child) 中的 useState

How to change useState in functional component (child) from class component (parent)

在我的 parent class 我有以下内容

<div>
  <button onClick(OPEN MODAL)>Open Modal<button/>
  <ModalReply /> // default to be closed at first
</div>

ModalReply 是功能组件

function ModalReply(props) {
  const [modalIsOpen, setModalIsOpen] = useState(false)

<div>
  <Modal 
    isOpen={modalIsOpen}
    onRequestClose={() => setModalIsOpen(false)}
  >
   <h1>Test</h1>
  </Modal>
</div>

来自我的 parent class 我想访问模态状态组件并将 useState --> setModalIsOpen 设置为 true

在 parent 中设置 modalState 并将它们作为 child 组件的道具传递。

在parent

  const [modalIsOpen, setModalIsOpen] = useState(false)

  const toggleModal = (val) => setModalIsOpen(val)

...

  <ModalReply modalisOpen={modalIsOpen} toggleModal={toggleModal}/>

在child

function ModalReply(props) {

<div>
  <Modal 
    isOpen={props.modalIsOpen}
    onRequestClose={() => props.toggleModal(false)}
  >
   <h1>Test</h1>
  </Modal>
</div>

将状态移至父级,使您的 ModalReply 无状态。

const ModalReply = ({ isOpen, onClose }) => (
  <div>
    <Modal isOpen={isOpen} onRequestClose={onClose}>
      <h1>Test</h1>
    </Modal>
  </div>
);

export default function App() {
  const [isOpen, setIsOpen] = useState(false);

  const toggle = setIsOpen((oldIsOpen) => !oldIsOpen);

  return (
    <div className="App">
      <button onClick={toggle}>Open Modal</button>
      <ModalReply isOpen={isOpen} onClose={toggle} />
    </div>
  );
}

React数据流是单向的,父组件不能直接修改子组件的状态。要实现您想要的效果,您需要:

  • 将状态移动到父组件并将数据作为道具传递给子组件。
  • 使用像 redux 或 mobx 这样的状态管理器
  • 使用上下文api