Как отобразить три раздела публикации фотографий внизу страницы с помощью Reactjs и Css

#css #reactjs

#css #reactjs

Вопрос:

Приведенный ниже код содержит три массива фотографий постов. Когда я нажимаю на каждую кнопку публикации, я должен видеть три раздела с фотографиями в нижней части, которые соответствуют каждому сообщению.

Моя проблема:

Моя проблема в том, что отображается только один раздел публикации фотографий, который продолжает заменять другие после того, как я добавил приведенный ниже CSS-код.

 const mainArea={
 position: 'fixed',
  width: '80%',
  bottom: '0%',
   display: 'inline-block'
}

const photodiv={
position: 'relative',
width: '250px',
  // height:auto,
  background: 'orange',
  color: 'black',
  borderRadius: '5px 5px 0px 0px',
  bottom: '0px',

}
  

скриншот, показывающий застрявший раздел, основанный на реализации CSS

скриншот, показывающий замятый раздел, основанный на реализации css

Что я хочу: мне нужно видеть три div-файла с фотографиями, если нажать кнопку переключения трех

Вот основной код

 import React, { Component, Fragment } from "react";
import { render } from "react-dom";

const mainArea={
 position: 'fixed',
  width: '80%',
  bottom: '0%',
   display: 'inline-block'
}

const photodiv={
position: 'relative',
width: '250px',
  // height:auto,
  background: 'orange',
  color: 'black',
  borderRadius: '5px 5px 0px 0px',
  bottom: '0px',

}

class Focus extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [],
      shown: true,
    };
  }

  componentDidMount() {
    this.setState({
      data: [
        { id: "1", title: "my first title", image: "http://localhost/apidb_react/1.png", visible: true , photoVisible: true},
        { id: "2", title: "my second title", image: "http://localhost/apidb_react/2.png", visible: true, photoVisible: true},
        { id: "3", title: "my third title", image: "http://localhost/apidb_react/3.png", visible: true, photoVisible: true}
      ]
    });
  }


  toggle(id) {
    const newData = this.state.data.map(item => {
      if(item.id === id) {
        return { ...item, visible: !item.visible};
      }

      return item;
    })

    this.setState({
      data: newData
    });
  }




/*

  hideUnhidePhoto(id) {

    const newData = this.state.data.map(item => {

alert(id);

      if(item.id === id) {
alert('ttto  '  item.id);
        return { ...item, photoVisible: !item.photoVisible};
      }

      return item;
    })

    this.setState({
      data: newData
    });
  }
*/



hideUnhidePhoto(id) {

    this.setState(({ data }) => {
        return { 
            data : data.map(item => ({ 
            ...item, 
            photoVisible : (id == item.id) ? !item.photoVisible : item.photoVisible }))
        }
    });
}



  render() {
    return (
      <div>
        <label>
          <ul>
            {this.state.data.map((post, i) => (
              <li key={i}>

<div style={mainArea}>
<div style={photodiv}>
                <div style={{ display: post.visible ? "none" : "block"}}> 

<b>Post Data:</b> {post.title} --{post.id}   <br />

<span style={{color: 'red'}} onClick={ () => this.hideUnhidePhoto(post.id) }> Hide/Unhide Photo</span>

<div style={{ display: post.photoVisible ? "block" : "none"}}> 

<img src={post.image} />

</div>

</div></div>
</div>
 <button onMouseDown={ () => this.toggle(post.id) }>Toggle </button><br />


                <br />
              </li>
            ))}
          </ul>
        </label>
      </div>
    );
  }







}
  

Ответ №1:

Если я правильно понимаю проблему, то это можно исправить, настроив ваш mainArea объект style следующим образом:

 const mainArea={
  /* position: 'fixed', Remove position fixed */
  width: '80%',
  bottom: '0%',
  display: 'inline-block'
}
  

fixed Положение в основном заключается в размещении элементов в определенном месте на экране относительно клиентской области окна. Это означает, что если у вас есть несколько элементов, которые имеют одинаковые координаты (по умолчанию) и расположены с fixed правилом, то эти элементы будут эффективно перекрывать друг друга. Это создает впечатление, что в любой момент времени виден только один элемент.

Рабочий пример смотрите в этом jsFiddle: введите описание ссылки здесь

Надеюсь, это поможет!

Комментарии:

1. Большое спасибо, сэр Дакр