Почему вы думаете, что не можете использовать внутренние переменные так же, как и с классами?
хорошо, чувствует себя немного грязно, но как насчет изменения состояния useState? 8)
Нет, это не работает должным образом. Состояние сбрасывается при повторном рендеринге
. возможно, наша логика должна основываться на самой анимации. Эта конкретная проблема может быть решена путем проверки класса, который устанавливает скорость для элемента во время его анимации.
const FunctionExample = ({ count }) => {
console.log("Rendering FunctionExample", count);
// let isAnimating = false; // no good if component rerenders during animation
// abuse useState var instead?
// let [isAnimating] = React.useState(false);
const blockRef = React.useRef(null);
// Animate the block.
const onClick = React.useCallback(() => {
// use feature of the anim itself
if (/velocity-animating/.test(blockRef.current.className)) {
return;
}
console.log("animation triggered");
Velocity(blockRef.current, {
translateX: 500,
complete: () => {
Velocity(blockRef.current, {
translateX: 0,
}, {
duration: 1000
});
}
}, {
duration: 5000
});
});
return (
<div>
<div
id = 'block'
onClick = {onClick}
ref = {blockRef}
style = {
{
width: '100px',
height: '10px',
backgroundColor: 'red'
}
}
>
{}
</div>
</div>
);
};
const Counter = () => {
const [count, setCount] = React.useState(0);
return <div>
<FunctionExample count={count} />
<button onClick={() => setCount(c => c + 1)}>Count</button>
</div>;
}
ReactDOM.render( < div > < Counter / > < /div>, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.2/velocity.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id='root' style='width: 100%; height: 100%'>
</div>
Заключите поле в двойные кавычки. Удвойте все встроенные двойные кавычки.
ordinary field,"field with , in it","field with double double quote ("""")"
Обратите внимание, что это очень, очень близко к вопросу Работа с запятыми в CSV-файле
Вы должны проверить fputcsv ()
. Там также есть несколько полезных комментариев.
int fputcsv (resource $ handle, array $ fields [, string $ delimiter = ',' [, строка $ enclosure = '"']])
fputcsv () форматирует строку (передано как массив полей) как CSV и записать его (завершается переводом строки) в указанный дескриптор файла.
Ум, почему бы просто не использовать встроенную команду mySQL? Если я что-то пропустил, пожалуйста, проигнорируйте, но я думаю, что это самый быстрый маршрут:
http://www.netreveal.com/ddalton/2006/08/how_to_export_mysql_to_csv.html
Сайт в основном предлагает:
SELECT <fields or *> INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM <table> WHERE <condition>
Редактировать: Плохо, я только что проверил это, и оно не работает - по крайней мере, в Excel.
Вы можете заменить запятые на что-то другое:
$field = str_replace(',','#COMMA#',$row['Field']);
$csv_output .= $field.', ';
Вы можете использовать другой разделитель, например " |» или «@», или какой-либо другой символ, который вряд ли появится в данных.
Большинство программного обеспечения CSV имеет возможность чтения в файле «CSV», который использует в качестве разделителя что-то отличное от запятой.