setState не обновляет состояние

182
23 ноября 2018, 15:50

Вот два компонента, при нажатии на MainWord появляется MainWordStand - окошко. Но при нажатии на крестик на этом окошке для его закрытия, не происходит ничего. Я вызываю метод closeStand компонента MainWord, через props, но setState не обновляет состояния. Пробовал напрямую через this.state.showStand, state также не меняется, вызов render напрямую, с передачей ему аргументов, тоже не получается. Но дело ещё и в том, что document.querySlector(.foreground).style.display = 'none' также не работает. Но если пишу какой-нибудь alert, он срабатывает. Даже если вызываю setState, которые меняет другую часть состояния, это срабатывает, но showStand менять не хочет. Как уже написал display не меняется, за то меняется visibility, если я пишу это)

class MainWordStand extends React.Component {
    constructor(props) {
        super(props)
        this.closeStand = this.closeStand.bind(this);
    }
    closeStand() {        
        this.props.closeStand();
    }
    render() {
        return ReactDOM.createPortal(
            <div className="word-stand">
                <span
                    className="fas fa-times close-window-button"
                    onClick={this.closeStand}
                />
                <h1>post</h1>   
                <p>noun:</p>
                <ul>
                    <li>Почта</li>
                    <li>Столб</li>
                    <li>Мачта</li>
                </ul>
                <p>verb:</p>
                <ul>
                    <li>Размещать</li>
                    <li>Расклеивать</li>
                </ul>
            </div>,
            document.querySelector('.foreground')
        )
    }
}
class MainWord extends React.Component {
    constructor(props) {
        super(props);
        this.contextMenuHandler = this.contextMenuHandler.bind(this);
        this.closeMenu = this.closeMenu.bind(this);
        this.deleteSelf = this.deleteSelf.bind(this);
        this.showStand = this.showStand.bind(this);
        this.closeStand = this.closeStand.bind(this);
        this.state = {
            showSelf: true,
            showMenu: false,
            showStand: false,
            x: 0,
            y: 0
        }
    }
    showStand() {
        this.setState({
            showStand: true
        });
        document.querySelector('.foreground').style.display = '';
    }
    closeStand() {
        this.setState({
            showStand: false
        });
        document.querySelector('.foreground').style.display = 'none';
    }
    contextMenuHandler(event) {
        event.preventDefault();
        this.setState({
            showMenu: true,
            x: event.pageX,
            y: event.pageY
        });
    }
    closeMenu() {
        this.setState({
            showMenu: false,
        })
    }
    deleteSelf() {
        this.setState({
            showSelf: false
        })
    }
    render() {
        console.log(this.state.showStand);
        if (this.state.showSelf)
            return (
                <div
                    className="main-word"
                    onContextMenu={this.contextMenuHandler}
                    onClick={this.showStand}
                >
                    <span>{this.props.value}</span>
                    {this.state.showMenu ?
                        <MainWordMenu
                            x={this.state.x}
                            y={this.state.y}
                            closeMenu={this.closeMenu}
                            id={this.props.id}
                            deleteCallback={this.deleteSelf}
                            showEditWord={this.props.showEditWord}
                        /> :
                        null}
                    {this.state.showStand ?
                        <MainWordStand
                            closeStand={this.closeStand}
                        /> :
                        null}
                </div>
            )
        else 
            return null;
    }
}
READ ALSO
анимация не работает в хроме

анимация не работает в хроме

есть такая конструкция

149
Контент поверх полноэкранного видео в ios

Контент поверх полноэкранного видео в ios

2 день мучаюсь с проблемойЕсть проект - видео-квест

133
Views выбор формата отображения

Views выбор формата отображения

Существует, страница Index в которой вызывается частичное представление

173