Django, эквивалентный из формы PHP, оценивает массив/ассоциативный массив

Если вы используете this.state.notecolor для сохранения цвета, то при обновлении состояния вся страница будет отрисована заново. Вот почему каждый note будет иметь одинаковый цвет фона.

Вот два разных трюка, чтобы сделать то, что вы пытаетесь достичь.

Вариант 1

Сохраните ваш notecolor как свойства объекта note в вашем noteArray. Например,


class MainApp extends Component {
  constructor(props) {
    super(props);

    this.state = {
      noteArray : [
        {
          note: "Hello world!",
          date: "2019-01-01",
          notecolor: "orange",
        }, 
        {
          note: "Hola world!",
          date: "2019-01-01",
          notecolor: "green",
        }
      ]
    };
  }

  render() {
    <View>
      {
        this.state.noteArray.map((val, key) => {
          return (
            <Note key={key} keyval={key} val={val} notecolor={val.notecolor} switchColor={this.switchColor} />
          );
        });
      }
    </View>
  }

  switchColor = (color, key) => {
    var noteArray = {this.state};
    noteArray[key]["notecolor"] = color;
    this.setState({
      noteArray
    })
  }
}

Чтобы использовать switchColor на note, вам просто нужно назвать его так

this.props.switchColor(newColor, this.props.key);


[ 1128] Вариант 2

Хранить notecolor в отдельном массиве. ** Вариант 1 - более чистый способ сделать это, если вы не возражаете против дополнительного свойства

noteArray = [
  {
    note: "Hello world!",
    date: "2019-01-01",
  }, 
  {
    note: "Hola world!",
    date: "2019-01-01",
  }
];

noteColorArray = ["orage", "green"];

Чтобы изменить цвет

switchColor = (color, key) => {
  var noteColorArray = {this.state};
  noteArray[key] = color;
  this.setState({
    noteColorArray
  })
}


Наконец

Чтобы сделать ваши заметки

let notes = this.state.noteArray.map((val, key) => {
  return (
    <Note key={key} keyval={key} val={val} notecolor={val.notecolor} />
    // OR, depends on which option you choose
    <Note key={key} keyval={key} val={val} notecolor={this.state.noteColorArray[key]} />
  );
});
45
задан Imran 29 April 2009 в 08:04
поделиться

2 ответа

Check out the QueryDict documentation, particularly the usage of QueryDict.getlist(key).

Since request.POST and request.GET in the view are instances of QueryDict, you could do this:

<form action='/my/path/' method='POST'>
<input type='text' name='hi' value='heya1'>
<input type='text' name='hi' value='heya2'>
<input type='submit' value='Go'>
</form>

Then something like this:

def mypath(request):
    if request.method == 'POST':
        greetings = request.POST.getlist('hi') # will be ['heya1','heya2']
63
ответ дан 26 November 2019 в 21:13
поделиться

Django не предоставляет способ получения ассоциативных массивов (словарей в Python) из объекта запроса. Как указано в первом ответе, вы можете использовать .getlist () по мере необходимости или написать функцию, которая может взять QueryDict и реорганизовать его по своему вкусу (вытаскивая ключ / значение). пары, если ключ соответствует некоторому шаблону клавиши [*] , например).

5
ответ дан 26 November 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: