状態をモーダル(子コンポーネント)に渡しても、子内の状態は変更されません

rob111

ボタンを押して、に切り替えshowModal、モーダルコンポーネントにtrue送信propsしますAddEventModalAddEventModalコンポーネントのコンストラクター内で、新しい状態をに割り当てopenます。その後、私はすべて準備ができているはずです。しかし、何らかの理由で私のopen状態はAddEventModalとどまりますfalseコードは次のとおりです。

import React, { Component } from 'react';
import Header from '../components/Header';
import Hour from '../components/Hour';
import Tile from '../components/Tile';
import CalEvent from '../components/CalEvent';
import AddButton from '../components/AddButton';
import AddEventModal from './AddEventModal';
import '../styles/calendar-grid.css';


class CalendarGrid extends Component {
  constructor(){
    super();
    this.state = {
      showModal: false
    }

    this.addEvent = this.addEvent.bind(this);
    this.handleOpenModal = this.handleOpenModal.bind(this);
  }

  handleOpenModal() {
    this.setState({ showModal: true });
  }

  handleCloseModal() {
    this.setState({ showModal: false });
  }

  render(){
    console.log(this.state.showModal);
    const gridTiles = [];


    return(
      <div className="calendar-grid"> 
        <AddButton showModal={this.handleOpenModal} />
        <AddEventModal  addEvent={this.addEvent} showModal={this.state.showModal}/>
      </div>
    )
  }
}

export default CalendarGrid;

私はすべてをpropsに入れていますAddEventModalopen状態を変えることはできません

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
import Modal from '@material-ui/core/Modal';
import Button from '@material-ui/core/Button';
import Icon from '@material-ui/core/Icon';
import Close from '@material-ui/icons/Close';
import TextField from '@material-ui/core/TextField';
import DateRange from '@material-ui/icons/DateRange';
import Select from '@material-ui/core/Select';
import FormControl from '@material-ui/core/FormControl';
import MenuItem from '@material-ui/core/MenuItem';
import InputLabel from '@material-ui/core/InputLabel';


const styles = theme => ({

});

class AddEventModal extends React.Component {
  constructor(props){
    super(props);
    this.state = {
      open: this.props.showModal,
      name: '',
      date: new Date(),
      time: ''
    };

  }


  handleClose = () => {
   this.setState({ open: false });
  };

  handleChange = name => event => {
    this.setState({
      [name]: event.target.value,
    });
  }

  render() {
    const { classes, showModal } = this.props;

    console.log(`AddEventModal: ${this.props.showModal}`);
    console.log(`AddEventModal: ${this.state.open}`);

    return (
      <div>

        <Modal
          aria-labelledby="simple-modal-title"
          aria-describedby="simple-modal-description"
          open={this.state.open}
          onClose={this.handleClose}
        >
          <div style={getModalStyle()} className={classes.paper}>
            <Close className={classes.closeIcon} onClick={this.handleClose} />
            <Typography variant="h6" id="modal-title">
              Create a New Event
            </Typography>
            <Typography variant="subtitle1" id="simple-modal-description">
              <form className={classes.container} noValidate autoComplete="off">
                <TextField
                   id="standard-name"
                   label="Event"
                   className={classes.textField}
                   value={this.state.name}
                   onChange={this.handleChange('name')}
                   margin="normal"
                />
                <div className={classes.dateAndTime}>
                  <TextField
                    id="date"
                    label="Date"
                    type="date"
                    defaultValue={this.state.date}
                    className={classes.textFieldDate}
                    InputLabelProps={{
                      shrink: true,
                    }}
                  />
                  <FormControl className={classes.formControl}>
                    <InputLabel htmlFor="time-simple">Time</InputLabel>
                      <Select
                      value={this.state.time}
                      onChange={this.handleChange('time')}
                      inputProps={{
                        name: 'time',
                        id: 'time-simple',
                      }}
                      >
                        {this.timeRange()}
                      </Select>
                  </FormControl>
                </div>
                <Button variant="outlined" className={classes.saveButton} onClick={this.handleClose}>Save</Button>
              </form>
            </Typography>
          </div>
        </Modal>
      </div>
    );
  }
}

AddEventModal.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default withStyles(styles)(AddEventModal);

どんなアドバイスもいただければ幸いです。

コリン・リカルド

open状態を設定していますが、showModal小道具から入ってくる状態によって上書きされています

ハンドラーをtoggleModalモーダルなどに渡し、それを使用してモーダルopenstate内部ではなく、小道具を変更する必要があります

これが例です。

import React from "react";
import ReactDOM from "react-dom";

const Modal = ({ open, toggle }) => {
  if (open) {
    return (
      <React.Fragment>
        <h1>Modal</h1>
        <button onClick={toggle}>Close</button>
      </React.Fragment>
    );
  }

  return null;
};

class App extends React.Component {
  state = {
    open: false
  };

  toggle = () => {
    this.setState({ open: !this.state.open });
  };

  render() {
    return (
      <React.Fragment>
        <button onClick={this.toggle}>Open</button>
        <Modal open={this.state.open} toggle={this.toggle} />
      </React.Fragment>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

CodeSandboxはこちら

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

reactJsの親の状態を変更しても、reactの子コンポーネントの小道具は変更されません

分類Dev

子コンポーネントから親の状態を変更しても機能しません

分類Dev

状態は更新されていますが、コンポーネントは小道具内の更新された状態をReactjsの子コンポーネントに送信していません

分類Dev

ダウングレードされたAngularコンポーネント内にUiルーターの子状態が読み込まれていません

分類Dev

親コンポーネントの状態が変更された後、子の状態がリセットされないようにします。すべての子コンポーネントの値も取得します。ReactJS+ Typescript

分類Dev

reactjs-状態を変更してもコンポーネントは再レンダリングされません

分類Dev

React:親の状態を更新する子コンポーネントに関数を渡して親の状態を更新できません

分類Dev

状態なしで親から渡される子コンポーネントの値を変更する方法

分類Dev

親コンポーネントの状態を子から変更し、その状態をプロパティとして渡し、子コンポーネントの状態を変更します

分類Dev

親コンポーネントの状態が更新されても、React子コンポーネントは更新されません

分類Dev

React:親コンポーネントはすべての子を再レンダリングします。状態の変更で変更されていない子も含みます

分類Dev

React:親コンポーネントはすべての子を再レンダリングします。状態の変更で変更されていない子も含みます

分類Dev

Reactjsの状態変更は、動的に作成された子コンポーネントには反映されません

分類Dev

React redux-親の状態は変化しますが、子コンポーネントは再レンダリングされません

分類Dev

子コンポーネントで渡されて呼び出された関数は、親の状態値にアクセスできません

分類Dev

親コンポーネントからモーダルをアクティブ化します。子参照は定義されていません。状態を解除せずに行うにはどうすればよいですか?

分類Dev

Reactコンポーネントは同じ小道具で再レンダリングされませんが、子の状態が変化します

分類Dev

子コンポーネントの状態が変更されたら、兄弟を更新します

分類Dev

reactは入力変更時に機能コンポーネントの状態を更新していません

分類Dev

コンポーネントは再レンダリングされませんが、reactフックを介してredux状態が変更されました

分類Dev

ReactJS:子コンポーネントの状態を変更します

分類Dev

子コンポーネントの状態を親に渡しますか?

分類Dev

状態が変化してもReactコンポーネントは更新されません

分類Dev

React-コンテナコンポーネント内で定義された関数を使用して子コンポーネントから状態を変更できません

分類Dev

子内の親コンポーネントの状態を変更する

分類Dev

親から子に小道具を渡して、子コンポーネントの状態で保存することができません

分類Dev

Simple Reactコンポーネントは、Reduxの状態変更後に更新されません

分類Dev

親コンポーネントの状態変更後にコンポーネントの子をレンダリングします

分類Dev

ステートレスな子コンポーネントに反応し、親コンポーネントの状態が変化しても更新されません

Related 関連記事

  1. 1

    reactJsの親の状態を変更しても、reactの子コンポーネントの小道具は変更されません

  2. 2

    子コンポーネントから親の状態を変更しても機能しません

  3. 3

    状態は更新されていますが、コンポーネントは小道具内の更新された状態をReactjsの子コンポーネントに送信していません

  4. 4

    ダウングレードされたAngularコンポーネント内にUiルーターの子状態が読み込まれていません

  5. 5

    親コンポーネントの状態が変更された後、子の状態がリセットされないようにします。すべての子コンポーネントの値も取得します。ReactJS+ Typescript

  6. 6

    reactjs-状態を変更してもコンポーネントは再レンダリングされません

  7. 7

    React:親の状態を更新する子コンポーネントに関数を渡して親の状態を更新できません

  8. 8

    状態なしで親から渡される子コンポーネントの値を変更する方法

  9. 9

    親コンポーネントの状態を子から変更し、その状態をプロパティとして渡し、子コンポーネントの状態を変更します

  10. 10

    親コンポーネントの状態が更新されても、React子コンポーネントは更新されません

  11. 11

    React:親コンポーネントはすべての子を再レンダリングします。状態の変更で変更されていない子も含みます

  12. 12

    React:親コンポーネントはすべての子を再レンダリングします。状態の変更で変更されていない子も含みます

  13. 13

    Reactjsの状態変更は、動的に作成された子コンポーネントには反映されません

  14. 14

    React redux-親の状態は変化しますが、子コンポーネントは再レンダリングされません

  15. 15

    子コンポーネントで渡されて呼び出された関数は、親の状態値にアクセスできません

  16. 16

    親コンポーネントからモーダルをアクティブ化します。子参照は定義されていません。状態を解除せずに行うにはどうすればよいですか?

  17. 17

    Reactコンポーネントは同じ小道具で再レンダリングされませんが、子の状態が変化します

  18. 18

    子コンポーネントの状態が変更されたら、兄弟を更新します

  19. 19

    reactは入力変更時に機能コンポーネントの状態を更新していません

  20. 20

    コンポーネントは再レンダリングされませんが、reactフックを介してredux状態が変更されました

  21. 21

    ReactJS:子コンポーネントの状態を変更します

  22. 22

    子コンポーネントの状態を親に渡しますか?

  23. 23

    状態が変化してもReactコンポーネントは更新されません

  24. 24

    React-コンテナコンポーネント内で定義された関数を使用して子コンポーネントから状態を変更できません

  25. 25

    子内の親コンポーネントの状態を変更する

  26. 26

    親から子に小道具を渡して、子コンポーネントの状態で保存することができません

  27. 27

    Simple Reactコンポーネントは、Reduxの状態変更後に更新されません

  28. 28

    親コンポーネントの状態変更後にコンポーネントの子をレンダリングします

  29. 29

    ステートレスな子コンポーネントに反応し、親コンポーネントの状態が変化しても更新されません

ホットタグ

アーカイブ