Добавить новый точный элемент по нажатию кнопки, используя реагировать-редукса - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в react-redux. Итак, у меня есть следующая разметка

<div className="questionLevelIndication">
                    <span className="levelIndicatorBtn backgroundColorForLow">
                        1
                    </span>
                    <label className="levelIndicationLabel">
                        Low Maximum 6
                    </label>
                </div>
                <div className="row topMargn">
                    <div className="questionRow">
                        <div className="rowContent borderRight text-center ">1</div>
                        <div className="rowContent fontStyle borderRight">
                            <label type="text">Select from </label>
                            <select value="" className="selectpicker btn btn-labeled btn-start selectId techDrop  margin-left-10">
                                <option value="">None Selected</option>
                                <option value="">Abc </option>
                                <option value="">PQR </option>
                            </select>
                        </div>
                        <div className="rowContent borderRight">
                            <div className="fontStyle">
                                <span>Select Questions Type</span>
                                <button type="button" className="btn btn-primary btn-sm margin-left-10 typeBtn">some Type</button>
                                <button type="button" className="btn btn-secondary btn-sm margin-left-10 typeBtn">Nothing Type</button>
                            </div>
                        </div>
                        <div className="rowContent">
                            <div className="fontStyle">
                                Number Of Questions
                                <select value="" className="numberDropdown selectpicker btn btn-labeled btn-start selectId quesSDrop margin-left-10">
                                    <option value="">01</option>
                                    <option value="">02</option>
                                </select>
                            </div>
                        </div>
                    </div>
                    <div className="rowContent">
                        <span className="">
                            <button type="button" className="btn btn-outline-primary btn-sm standard-btn-50">Reset</button>
                        </span>
                        <span>
                            <button type="button" className="btn btn-primary btn-sm standard-btn-50 margin-left-10">+</button>
                        </span>
                    </div>
                </div>

Здесь представлены три типа полей:

1.low
2.medium
3.hard

для каждого поля будет одна и та же структура HTML.

Итак, я использовал один и тот же код трижды.В каждой категории есть кнопка «плюс», теперь при нажатии этой кнопки соответствующая строка будет реплицирована один раз для первого пользователя с максимум 6 строками.

Таким образом, то же самое относится и к среднему и жесткому,У меня есть несколько вопросов, таких как:

1.Как у меня может быть только одна html-структура, которая будет отображаться для трех категорий?

Если пользователь нажимает кнопку «плюс», то как мне добавить эту точную строку после первой с изменением идентификаторов?

Как получить значение каждого добавленногоновая строка с предыдущей?

Если пользователь удалил эту строку, то как мне ее удалить?

Где я могудобавить полосу прокрутки, потому что может быть добавлено максимум 20 строк?

Может кто-нибудь дать мне подсказку?Это будет действительно полезно.

1 Ответ

0 голосов
/ 25 сентября 2018

1.Как у меня может быть только одна html структура, которая будет отображаться для трех категорий?

Вы можете сохранить свои три категории в трех константах let, например:

render() {
  let theFirstItem = <div> Your 1 st content here </div>
  let theSecondItems = <div> Your 2 nd content here </div>
  let theThirdItems = <div> Your 3 rd content here </div>

  return(
    <div>
      <div>{theFirstItem}</div>
      <div>{theSecondItem}</div>
      <div>{theThirdItem}</div>
    </div>
  )
}

2.Если пользователь нажимает кнопку «плюс», то как мне добавить эту точную строку после первой с изменением идентификаторов?

Пример кода:

import React, {
  Component
} from "react";

class details extends Component {
  constructor() {
    super();
    this.state = {
      rows: []
    };
    this.addRow = this.addRow.bind(this);
  }

  componentDidMount() {
    let r1 = <div> Your template code here </div>;
    var rows = this.state.rows;
    rows.push(r1);
    this.setState({
      rows: rows
    });
  }

  addRow() {
    var rows = this.state.rows;
    let rPlus = <div> Added row here </div>;
    rows.push(rPlus);
    this.setState({
      rows: rows
    });
  }

  render() {
    return (
      <div>
        <div>
          {this.state.rows.map(row => (
            <tr>
              <td>{row}</td>
            </tr>
          ))}
        </div>
        <div>
          <button onClick={this.addRow}>Your Plus Button</button>
        </div>
      </div>
    );
  }
}

export default details;

3.Как получить значение каждой добавленной новой строки вместе с предыдущей?

Учитывая, что вы не указали, когда хотитечтобы получить значение каждой добавленной строки, я предполагаю, что вы хотите сохранить ввод пользователя, когда он нажимает кнопку «плюс».Если это так, вам нужно либо создать форму, либо обработать значение, добавив функцию onClick для отправки всех значений строки.Я предлагаю вам сохранить все значения текущей строки редактирования в этом значении this.state, а затем, как только пользователь отправит их, вы можете сохранить их в избыточном состоянии или напрямую сохранить в вашей базе данных.

Например:

constructor() {
  super();
  this.state = {
    value: ""
  };
  this.onChange = this.onChange.bind(this);
}
onChange(e) {
  this.setState({
    [e.target.name]: e.target.value
  });
  //do not forget this, or user cannot modify the value.
}

И в HTML, если вы используете ввод:

<input 
  name="searchContent" 
  value={this.state.yourValue} 
  onChange={this.onChange} 
/>

Затем добавьте функцию onClick, чтобы сохранить текущее значение this.state во что угодно.

4. Если пользователь удалил эту строкутогда как мне удалить это?

Вы должны сохранить индексы строк при сохранении всех значений строки.И используйте:

array.splice(index, 1);

, чтобы удалить строку из массива "lines", который я указал для Q2.

5.Где добавить полосу прокрутки, поскольку может быть добавлено максимум 20 строк?

Пример HTML:

<!DOCTYPE html>
<html>
<head>
<title>My Example</title>

<!-- CSS -->
<style>
/* Force scrollbars onto browser window */
body {
margin-bottom: 200%;
}

/* Box styles */
.myBox {
border: none;
padding: 5px;
font: 24px/36px sans-serif;
width: 200px;
height: 200px;
overflow: scroll;
}

/* Scrollbar styles */
::-webkit-scrollbar {
width: 12px;
height: 12px;
}

::-webkit-scrollbar-track {
box-shadow: inset 0 0 10px olivedrab;
border-radius: 10px;
}

::-webkit-scrollbar-thumb {
border-radius: 10px;
background: yellowgreen; 
box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 
}

::-webkit-scrollbar-thumb:hover {
background: #7bac10;
}
</style>
</head>
<body>

<!-- HTML -->
<div class="myBox">
Your rows here.
Your rows here.
Your rows here.
...
</div>

</body>
</html>

На этой странице можно найти другие стили: Полоса прокрутки

Надеюсь, мой ответ поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...