Если вы используете 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]} />
);
});
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']
Django не предоставляет способ получения ассоциативных массивов (словарей в Python) из объекта запроса. Как указано в первом ответе, вы можете использовать .getlist ()
по мере необходимости или написать функцию, которая может взять QueryDict
и реорганизовать его по своему вкусу (вытаскивая ключ / значение). пары, если ключ соответствует некоторому шаблону клавиши [*]
, например).